Uwaga:pytanie się zmieniło – zobacz aktualizacje poniżej.
Oryginalna odpowiedź:
Tak.
Zamiast:
db.tableName.find({ col: 'value' })
Używasz go jako:
db.collection('tableName').find({ col: 'value' }, (err, data) => {
if (err) {
// handle error
} else {
// you have data here
}
});
Zobacz:http://mongodb.github.io /node-mongodb-native/2.2/api/Collection.html#find
Aktualizacja
Po zmianie pytania i opublikowaniu kilku komentarzy staje się bardziej jasne, co chcesz zrobić.
Aby osiągnąć swój cel emulacji powłoki Mongo w Node, musisz przeanalizować polecenie wpisane przez użytkownika i wykonać odpowiednie polecenie, pamiętając:
- różnica między SpiderMonkey używanym przez powłokę Mongo a Node z V8 i libuv
- różnica między BSON i JSON
- fakt, że powłoka Mongo działa synchronicznie, a sterownik Node działa asynchronicznie
Ostatnia część będzie prawdopodobnie najtrudniejsza dla Ciebie. Pamiętaj, że w powłoce Mongo jest to całkowicie legalne:
db.test.find()[0].x;
W węźle .find()
Metoda nie zwraca wartości, ale albo przyjmuje wywołanie zwrotne, albo zwraca obietnicę. To będzie trudne. db.test.find()[0].x;
sprawa może być stosunkowo łatwa do załatwienia z obietnicami (jeśli dobrze je rozumiesz), ale będzie to trudniejsze:
db.test.find({x: db.test.find()[0].x});
i pamiętaj, że musisz obsługiwać dowolnie zagnieżdżone poziomy.
Protokół Mongo
Po przeczytaniu niektórych komentarzy myślę, że warto zauważyć, że to, co faktycznie wysyłasz na serwer Mongo, nie ma nic wspólnego z JavaScriptem, który piszesz w powłoce Mongo. Powłoka Mongo używa SpiderMonkey z wieloma predefiniowanymi funkcjami i obiektami.
Ale tak naprawdę nie wysyłasz JavaScriptu na serwer Mongo, więc nie możesz wysyłać rzeczy takich jak db.collection.find()
. Zamiast tego wysyłasz binarne OP_QUERY
struct z nazwą kolekcji zakodowaną jako cstring i zapytaniem zakodowanym jako BSON plus kilka flag binarnych. Zobacz:
BSON sam w sobie jest formatem binarnym z wieloma wartościami niskiego poziomu zdefiniowanymi jako bajty:
Najważniejsze jest to, że nie wysyłasz do serwera Mongo niczego, co przypomina to, co wpisujesz w powłoce Mongo. Powłoka Mongo analizuje rzeczy, które wpisujesz za pomocą parsera SpiderMonkey i wysyła żądania binarne do właściwego serwera Mongo. Powłoka Mongo używa JavaScript, ale nie komunikujesz się z serwerem Mongo w JavaScript.
Przykład
Nawet obiekt zapytania JSON nie jest wysyłany do Mongo jako JSON. Na przykład, gdy szukasz dokumentu z hello
Właściwość równa "world", której użyłbyś {hello: 'world'}
w JavaScript lub {"hello": "world"}
w JSON, ale to jest przesyłane na serwer Mongo - przez powłokę Mongo lub przez dowolnego innego klienta Mongo:
\x16\x00\x00\x00\x02hello\x00\x06\x00\x00\x00world\x00\x00
Dlaczego jest tak inny
Aby zrozumieć, dlaczego składnia używana w Node jest tak różna od powłoki Mongo, zobacz odpowiedź: