Hinweis:Die Frage hat sich geändert - siehe die Aktualisierungen unten.
Ursprüngliche Antwort:
Ja.
Statt:
db.tableName.find({ col: 'value' })
Sie verwenden es als:
db.collection('tableName').find({ col: 'value' }, (err, data) => {
if (err) {
// handle error
} else {
// you have data here
}
});
Siehe:http://mongodb.github.io /node-mongodb-native/2.2/api/Collection.html#find
Aktualisieren
Nachdem Sie Ihre Frage geändert und einige Kommentare gepostet haben, ist klarer, was Sie tun möchten.
Um Ihr Ziel zu erreichen, die Mongo-Shell in Node zu emulieren, müssten Sie den vom Benutzer eingegebenen Befehl parsen und den entsprechenden Befehl ausführen, wobei Sie Folgendes beachten sollten:
- der Unterschied zwischen SpiderMonkey, der von der Mongo-Shell verwendet wird, und Node mit V8 und libuv
- der Unterschied zwischen BSON und JSON
- die Tatsache, dass die Mongo-Shell synchron arbeitet und der Node-Treiber asynchron arbeitet
Der letzte Teil wird wahrscheinlich der schwierigste Teil für Sie sein. Denken Sie daran, dass dies in der Mongo-Shell vollkommen legal ist:
db.test.find()[0].x;
Im Knoten die .find()
-Methode gibt den Wert nicht zurück, nimmt aber entweder einen Rückruf entgegen oder gibt ein Promise zurück. Es wird schwierig. Der db.test.find()[0].x;
Der Fall kann mit Versprechen relativ einfach zu handhaben sein (wenn Sie die Versprechen gut verstehen), aber dies wird schwieriger:
db.test.find({x: db.test.find()[0].x});
und denken Sie daran, dass Sie mit willkürlich verschachtelten Ebenen umgehen müssen.
Das Mongo-Protokoll
Nachdem ich einige der Kommentare gelesen habe, denke ich, dass es erwähnenswert ist, dass das, was Sie tatsächlich an den Mongo-Server senden, nichts mit dem JavaScript zu tun hat, das Sie in der Mongo-Shell schreiben. Die Mongo-Shell verwendet SpiderMonkey mit einer Reihe vordefinierter Funktionen und Objekte.
Aber Sie senden kein JavaScript an den Mongo-Server, also können Sie keine Dinge wie db.collection.find()
senden . Stattdessen senden Sie eine binäre OP_QUERY
struct mit einem als cstring codierten Sammlungsnamen und einer als BSON codierten Abfrage sowie einer Reihe binärer Flags. Siehe:
Der BSON ist selbst ein Binärformat mit einer Reihe von Low-Level-Werten, die als Bytes definiert sind:
Das Fazit ist, dass Sie nichts an den Mongo-Server senden, was dem ähnelt, was Sie in die Mongo-Shell eingeben. Die Mongo-Shell analysiert die Dinge, die Sie mit dem SpiderMonkey-Parser eingeben, und sendet binäre Anfragen an den eigentlichen Mongo-Server. Die Mongo-Shell verwendet JavaScript, aber Sie kommunizieren nicht mit dem Mongo-Server in JavaScript.
Beispiel
Auch das JSON-Abfrageobjekt wird nicht als JSON an Mongo gesendet. Zum Beispiel, wenn Sie nach einem Dokument mit einem hello
suchen Eigenschaft gleich "world", würden Sie {hello: 'world'}
verwenden in JavaScript oder {"hello": "world"}
in JSON, aber das wird an den Mongo-Server gesendet - von der Mongo-Shell oder von einem anderen Mongo-Client:
\x16\x00\x00\x00\x02hello\x00\x06\x00\x00\x00world\x00\x00
Warum es so anders ist
Um zu verstehen, warum sich die in Node verwendete Syntax so sehr von der Mongo-Shell unterscheidet, lesen Sie diese Antwort: