2013-07-15 8 views
10

Ich versuche, die mongodb Client „Robomongo“ http://robomongo.org/Robomongo, wie benutze ich benutzerdefinierte Funktionen?

Es funktioniert gut zu bedienen, aber ich kann nicht verstehen, wie man die Funktionen auf der „Funktionen“ erstellt haben Zugriff auf ...

I will die verkleinern Funktionalität testen, so dass ich eine Karte erstellt habe() und reduziert() Funktion, aber wenn ich auf meiner Shell schreiben:

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

Robomongo gibt mir den folgenden Fehler:

ReferenceError: map is not defined (shell):1 

ich auch so versucht haben:

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

Aber auch hier falsch ...

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

Antwort

19

Sie gespeicherte Funktionen zugreifen auf verschiedene Weise kann etwas zu sein scheint:

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}}); 

Bitte beachte, dass wir jetzt Funktionen verwenden, keine Strings wie in 1)

3)

Wenn Sie MongoDB 2.1 oder höher verwenden, Sie können tun:

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

Weitere Informationen: http://docs.mongodb.org/manual/tutorial/store-javascript-function-on-server/

Robomongo verwenden die gleiche Engine, die von MongoDB Shell verwendet wird. Ihre Fragen beziehen sich auf MongoDB, nicht auf Robomongo.

9

Nach einer Funktion unter Verwendung RoboMongo Erstellen im Shell-Befehl Textbox eingeben:

db.loadServerScripts(); 
myFunctionName(); 

und klicken Execute Taste in der Werkzeugleiste

Verwandte Themen