Забележка:Въпросът е променен – вижте актуализациите по-долу.
Оригинален отговор:
Да.
Вместо:
db.tableName.find({ col: 'value' })
Използвате го като:
db.collection('tableName').find({ col: 'value' }, (err, data) => {
if (err) {
// handle error
} else {
// you have data here
}
});
Вижте:http://mongodb.github.io /node-mongodb-native/2.2/api/Collection.html#find
Актуализация
След като променихте въпроса си и публикувахте коментари, вече е по-ясно какво искате да направите.
За да постигнете целта си да емулирате обвивката на Mongo в Node, ще трябва да анализирате командата, въведена от потребителя, и да изпълните подходящата команда, като имате предвид:
- разликата между SpiderMonkey, използван от обвивката на Mongo и Node с V8 и libuv
- разликата между BSON и JSON
- фактът, че обвивката на Mongo работи синхронно и драйверът на Node работи асинхронно
Последната част вероятно ще бъде най-трудната част за вас. Не забравяйте, че в обвивката на Mongo това е напълно законно:
db.test.find()[0].x;
В Node .find()
методът не връща стойността, но или приема обратно извикване, или връща обещание. Ще бъде трудно. db.test.find()[0].x;
случай може да е относително лесен за справяне с обещания (ако разбирате обещанията добре), но това ще бъде по-трудно:
db.test.find({x: db.test.find()[0].x});
и не забравяйте, че трябва да боравите с произволно вложени нива.
Протоколът Mongo
След като прочетох някои от коментарите, мисля, че си струва да се отбележи, че това, което всъщност изпращате на сървъра на Mongo, няма нищо общо с JavaScript, който пишете в обвивката на Mongo. Обвивката Mongo използва SpiderMonkey с редица предварително дефинирани функции и обекти.
Но всъщност не изпращате JavaScript към Mongo сървъра, така че не можете да изпращате неща като db.collection.find()
. По-скоро изпращате двоичен OP_QUERY
struct с име на колекция, кодирано като cstring и заявка, кодирана като BSON плюс куп двоични флагове. Вижте:
Самият BSON е двоичен формат с редица стойности на ниско ниво, дефинирани като байтове:
Изводът е, че не изпращате до сървъра на Mongo нищо, което да прилича на това, което въвеждате в обвивката на Mongo. Обвивката на Mongo анализира нещата, които въвеждате, използвайки парсера SpiderMonkey и изпраща двоични заявки към действителния сървър на Mongo. Обвивката на Mongo използва JavaScript, но вие не комуникирате със сървъра на Mongo в JavaScript.
Пример
Дори обектът на заявката JSON не се изпраща на Mongo като JSON. Например, когато търсите документ с hello
свойство, равно на "свят", бихте използвали {hello: 'world'}
в JavaScript или {"hello": "world"}
в JSON, но това е, което се изпраща до сървъра на Mongo - от обвивката на Mongo или от всеки друг клиент на Mongo:
\x16\x00\x00\x00\x02hello\x00\x06\x00\x00\x00world\x00\x00
Защо е толкова различно
За да разберете защо синтаксисът, използван в Node, е толкова различен от обвивката на Mongo, вижте този отговор: