Obs! Frågan har ändrats – se uppdateringarna nedan.
Ursprungligt svar:
Ja.
Istället för:
db.tableName.find({ col: 'value' })
Du använder 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
Uppdatera
Efter att du ändrat din fråga och postat några kommentarer är det tydligare vad du vill göra.
För att uppnå ditt mål att emulera Mongo-skalet i Node skulle du behöva analysera kommandot som skrivits av användaren och utföra lämpligt kommando samtidigt som du kommer ihåg:
- skillnaden mellan SpiderMonkey som används av Mongo-skalet och Node med V8 och libuv
- skillnaden mellan BSON och JSON
- det faktum att Mongo-skalet fungerar synkront och Node-drivrutinen fungerar asynkront
Den sista delen kommer förmodligen att vara den svåraste delen för dig. Kom ihåg att i Mongo-skalet är detta helt lagligt:
db.test.find()[0].x;
I Node visas .find()
Metoden returnerar inte värdet men den tar antingen en återuppringning eller returnerar ett löfte. Det kommer att bli knepigt. db.test.find()[0].x;
fall kan vara relativt lätt att hantera med löften (om du förstår löftena väl) men detta kommer att bli svårare:
db.test.find({x: db.test.find()[0].x});
och kom ihåg att du måste hantera godtyckligt kapslade nivåer.
Mongo-protokollet
Efter att ha läst några av kommentarerna tycker jag att det är värt att notera att det du faktiskt skickar till Mongo-servern inte har något att göra med JavaScriptet som du skriver i Mongo-skalet. Mongo-skalet använder SpiderMonkey med ett antal fördefinierade funktioner och objekt.
Men du skickar faktiskt inte JavaScript till Mongo-servern så du kan inte skicka saker som db.collection.find()
. Snarare skickar du en binär OP_QUERY
struct med ett samlingsnamn kodat som en cstring och en fråga kodad som BSON plus ett gäng binära flaggor. Se:
BSON är i sig ett binärt format med ett antal lågnivåvärden definierade som bytes:
Summan av kardemumman är att du inte skickar till Mongo-servern något som liknar det du anger i Mongo-skalet. Mongo-skalet analyserar de saker som du skriver med hjälp av SpiderMonkey-parsern och skickar binära förfrågningar till den faktiska Mongo-servern. Mongo-skalet använder JavaScript men du kommunicerar inte med Mongo-servern i JavaScript.
Exempel
Inte ens JSON-frågeobjektet skickas till Mongo som JSON. Till exempel när du söker efter ett dokument med en hello
egenskap lika med "värld" skulle du använda {hello: 'world'}
i JavaScript eller {"hello": "world"}
i JSON men det här är vad som skickas till Mongo-servern - av Mongo-skalet eller av någon annan Mongo-klient:
\x16\x00\x00\x00\x02hello\x00\x06\x00\x00\x00world\x00\x00
Varför det är så annorlunda
För att förstå varför syntaxen som används i Node skiljer sig så mycket från Mongo-skalet, se det här svaret: