Poznámka:Otázka se změnila – viz aktualizace níže.
Původní odpověď:
Ano.
Místo:
db.tableName.find({ col: 'value' })
Používáte jej jako:
db.collection('tableName').find({ col: 'value' }, (err, data) => {
if (err) {
// handle error
} else {
// you have data here
}
});
Viz:http://mongodb.github.io /node-mongodb-native/2.2/api/Collection.html#find
Aktualizovat
Poté, co změníte svou otázku a odešlete nějaké komentáře, je jasnější, co chcete dělat.
Abyste dosáhli svého cíle emulovat Mongo shell v Node, museli byste analyzovat příkaz zadaný uživatelem a provést příslušný příkaz, přičemž byste měli mít na paměti:
- rozdíl mezi SpiderMonkey používaným prostředím Mongo a Node s V8 a libuv
- rozdíl mezi BSON a JSON
- skutečnost, že prostředí Mongo funguje synchronně a ovladač Node funguje asynchronně
Poslední část pro vás bude pravděpodobně nejtěžší. Pamatujte, že v Mongo shellu je to naprosto legální:
db.test.find()[0].x;
V uzlu .find()
metoda nevrací hodnotu, ale buď vezme zpětné volání, nebo vrátí příslib. Bude to záludné. db.test.find()[0].x;
Případ může být relativně snadno zvládnutelný pomocí slibů (pokud slibům dobře rozumíte), ale toto bude těžší:
db.test.find({x: db.test.find()[0].x});
a pamatujte si, že musíte zvládnout libovolně vnořené úrovně.
Protokol Mongo
Po přečtení některých komentářů si myslím, že stojí za zmínku, že to, co skutečně odešlete na server Mongo, nemá nic společného s JavaScriptem, který napíšete do shellu Mongo. Shell Mongo používá SpiderMonkey s řadou předdefinovaných funkcí a objektů.
Ale ve skutečnosti neposíláte JavaScript na server Mongo, takže nemůžete odesílat věci jako db.collection.find()
. Spíše odešlete binární OP_QUERY
struct s názvem kolekce zakódovaným jako cstring a dotazem zakódovaným jako BSON plus hromada binárních příznaků. Viz:
BSON je sám o sobě binární formát s řadou hodnot nízké úrovně definovaných jako bajty:
Pointa je, že na server Mongo nepošlete nic, co by se podobalo tomu, co zadáte do shellu Mongo. Shell Mongo analyzuje věci, které napíšete, pomocí analyzátoru SpiderMonkey a odesílá binární požadavky na skutečný server Mongo. Shell Mongo používá JavaScript, ale se serverem Mongo nekomunikujete v JavaScriptu.
Příklad
Ani objekt dotazu JSON není odeslán do Mongo jako JSON. Například když hledáte dokument s hello
vlastnost rovnající se "svět" byste použili {hello: 'world'}
v JavaScriptu nebo {"hello": "world"}
v JSON, ale toto se odesílá na server Mongo – pomocí prostředí Mongo nebo jakéhokoli jiného klienta Mongo:
\x16\x00\x00\x00\x02hello\x00\x06\x00\x00\x00world\x00\x00
Proč je to tak odlišné
Chcete-li pochopit, proč se syntaxe používaná v Node tak liší od prostředí Mongo, podívejte se na tuto odpověď: