Bemærk:Spørgsmålet er ændret - se opdateringerne nedenfor.
Oprindeligt svar:
Ja.
I stedet for:
db.tableName.find({ col: 'value' })
Du bruger det som:
db.collection('tableName').find({ col: 'value' }, (err, data) => {
if (err) {
// handle error
} else {
// you have data here
}
});
Se:http://mongodb.github.io /node-mongodb-native/2.2/api/Collection.html#find
Opdater
Efter du har ændret dit spørgsmål og skrevet nogle kommentarer, er det mere klart, hvad du vil gøre.
For at nå dit mål med at emulere Mongo-skallen i Node skal du parse kommandoen skrevet af brugeren og udføre den passende kommando, mens du husker:
- forskellen mellem SpiderMonkey brugt af Mongo-skallen og Node med V8 og libuv
- forskellen mellem BSON og JSON
- det faktum, at Mongo-shell fungerer synkront, og Node-driveren fungerer asynkront
Den sidste del vil nok være den sværeste del for dig. Husk, at i Mongo-skallen er dette helt lovligt:
db.test.find()[0].x;
I Node er .find()
metoden returnerer ikke værdien, men den tager enten et tilbagekald eller returnerer et løfte. Det bliver tricky. db.test.find()[0].x;
sagen kan være forholdsvis let at håndtere med løfter (hvis du forstår løfterne godt), men dette vil være sværere:
db.test.find({x: db.test.find()[0].x});
og husk, at du skal håndtere vilkårligt indlejrede niveauer.
Mongo-protokollen
Efter at have læst nogle af kommentarerne, synes jeg, det er værd at bemærke, at det, du faktisk sender til Mongo-serveren, ikke har noget at gøre med det JavaScript, som du skriver i Mongo-skallen. Mongo-skallen bruger SpiderMonkey med en række foruddefinerede funktioner og objekter.
Men du sender faktisk ikke JavaScript til Mongo-serveren, så du kan ikke sende ting som db.collection.find()
. I stedet sender du en binær OP_QUERY
struct med et samlingsnavn kodet som en cstring og en forespørgsel kodet som BSON plus en masse binære flag. Se:
BSON er i sig selv et binært format med et antal lavniveauværdier defineret som bytes:
Den nederste linje er, at du ikke sender til Mongo-serveren noget, der ligner det, du indtaster i Mongo-skallen. Mongo-skallen analyserer de ting, du skriver ved hjælp af SpiderMonkey-parseren, og sender binære anmodninger til den faktiske Mongo-server. Mongo-skallen bruger JavaScript, men du kommunikerer ikke med Mongo-serveren i JavaScript.
Eksempel
Selv JSON-forespørgselsobjektet sendes ikke til Mongo som JSON. For eksempel, når du søger efter et dokument med en hello
egenskab lig med "verden" ville du bruge {hello: 'world'}
i JavaScript eller {"hello": "world"}
i JSON, men dette er, hvad der sendes til Mongo-serveren - af Mongo-skallen eller af enhver anden Mongo-klient:
\x16\x00\x00\x00\x02hello\x00\x06\x00\x00\x00world\x00\x00
Hvorfor er det så anderledes
For at forstå, hvorfor syntaksen brugt i Node er så forskellig fra Mongo-skallen, se dette svar: