10

mongodb クライアント "Robomongo" http://robomongo.org/を使用しようとしています。

正常に動作しますが、「関数」セクションで作成された関数にアクセスする方法がわかりません...

mapReduce 機能をテストしたいので、map() および reduce() 関数を作成しましたが、シェルに書き込むと:

db.<name_of_collection>.mapReduce(map, reduce, {out: {inline: 1}});

ロボモンゴは私に次のエラーを与えます:

ReferenceError: map is not defined (shell):1

私もこのように試しました:

db.<collection_name>.mapReduce(db.system.js.map, db.system.js.reduce, {out: {inline: 1}});

しかし、また何かが間違っているようです...

uncaught exception: map reduce failed:{
    "errmsg" : "exception: JavaScript execution failed: ReferenceError: learn is not defined",
    "code" : 16722,
    "ok" : 0
}
4

2 に答える 2

20

いくつかの方法で保存された関数にアクセスできます。

1)

db.collection.mapReduce(
    "function() { return map(); }", 
    "function(key, values) { return reduce(key, values); }",
    {out: {inline: 1}});

2)

db.collection.mapReduce(
    function() { return map(); }, 
    function(key, values) { return reduce(key, values); },
    {out: {inline: 1}});

1) のような文字列ではなく、現在関数を使用していることに注意してください)

3)

MongoDB 2.1 以降を使用している場合は、次のことができます。

db.loadServerScripts();
db.collection.mapReduce(
    map, 
    reduce,
    {out: {inline: 1}});    

これについての詳細: http://docs.mongodb.org/manual/tutorial/store-javascript-function-on-server/

Robomongo は、MongoDB シェルで使用されるのと同じエンジンを使用します。あなたの質問は、Robomongo ではなく、MongoDB に関するものです。

于 2013-07-16T14:52:27.977 に答える
10

を使用して関数を作成した後RoboMongo、シェル コマンドのテキスト ボックスに次のように入力します。

db.loadServerScripts();
myFunctionName();

Executeツールバーの ボタンをクリックします

于 2016-10-06T20:36:51.837 に答える