2010-08-29 11 views
21

Was sind die Grundlagen von MongoDB-Skripten?Grundlagen von MongoDB-Skripten - wie zu

denke ich das Skript mit .js enden wird, und wir führen Sie es mongo try.js

mit Aber wenn ich

setzen
print(db.foo.find()) 

in try.js und verwenden mongo try.js

es wird sagen

MongoDB shell version: 1.6.1 
connecting to: test 
DBQuery: test.foo -> undefined 

und wenn ich uns e die interaktive Shell durch mongo und Typ eingeben

> db.foo.find() 
{ "_id" : ObjectId("4c7a73428261000000003a7e"), "a" : 1 } 
> print(db.foo.find()) 
DBQuery: test.foo -> undefined 

die {a : 1} war etwas, was ich früher mit db.foo.insert({a:1})

eingefügt, was die richtige Art und Weise zu tun, MongoDB Skripte sind und wie die Dinge aus wie ein Ruby-irb oder Python drucken IDLE? Vielen Dank. (Rubys puts a.inspect oder p a kann sowohl in der Regel aus der gesamten Struktur von a drucken (alle Variablennamen und Werte in a))

alert(db.foo.find()) und console.log(db.foo.find()) wird nicht funktionieren.

+3

fand ich, dass ich die Dinge drucken kann aus mit 'printjson ({hm: 'ja'})' oder 'db.foo.find() .forEach (printjson) 'wenn nicht in der Shell –

Antwort

36

Die externen Skriptdateien werden außerhalb des Shellkontexts ausgeführt.

Der Datenbankbefehl db.foo.find() gibt nur einen Cursor zurück; es druckt nichts von selbst. Wenn der Befehl von der Shell ausgegeben wird, iteriert die Shell den Cursor und druckt die Ergebnisse. Wenn der Befehl von einer externen Skriptdatei ausgeführt wird, wird nichts gedruckt.

Der Befehl print() gibt die Zeichenfolgendarstellung des Objekts aus. In Ihrem Fall ist es der Cursor:

> print(db.foo.find()) 
DBQuery: test.foo -> undefined 

Wenn Sie Ergebnisse der Abfrage drucken, haben Sie die Cursor in Ihrer Script-Datei durchlaufen und jedes Ergebnis drucken, ähnlich zu dem, was die Shell tut:

function printResult (r) { 
    print(tojson(r)) 
} 

db.foo.find().forEach(printResult) 
13

Es gibt eine integrierte Funktion zum Drucken eines JSON-Objekts.

Am Ende des Funktionsaufrufs einfach .forEach(printjson) anhängen.

db.foo.find().forEach(printjson);