2013-07-15 21 views
10

Próbuję użyć klienta MongoDB „Robomongo” http://robomongo.org/Robomongo, jak korzystać z funkcji niestandardowych?

To działa dobrze, ale nie mogę zrozumieć, jak uzyskać dostęp do funkcji utworzonych w sekcji „Funkcje” ...

I aby przetestować funkcjonalność MapReduce, więc stworzyliśmy mapę() i zmniejszyć() funkcji, ale kiedy piszę na moim powłoki:

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

Robomongo dać mi następujący błąd:

ReferenceError: map is not defined (shell):1 

Próbowałem zostały również tak:

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

Ale znowu, coś wydaje się być źle ...

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

Odpowiedz

19

Można uzyskać dostęp do funkcji składowanych na kilka sposobów:

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

Zauważ, że używamy funkcji teraz, a nie ciągi jak w 1)

3)

Jeśli używasz MongoDB 2.1 lub nowszej, możesz zrobić:

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

Więcej na ten temat: http://docs.mongodb.org/manual/tutorial/store-javascript-function-on-server/

Robomongo używa tego samego silnika, który jest używany przez powłokę MongoDB. Twoje pytania dotyczą MongoDB, a nie Robomongo.

9

Po utworzeniu funkcji za pomocą RoboMongo, w polu tekstowym wpisać polecenia powłoki:

db.loadServerScripts(); 
myFunctionName(); 

i kliknij Execute przycisk na pasku narzędzi

Powiązane problemy