2013-07-09 13 views
30

Używam MongoDb (jako część MongoJS) w Node. Here is the documentation for MongoJS.Prawidłowy sposób wyszukiwania wpisów MongoDB przez '_id' w węźle

Próbuję wykonać wywołanie w węźle na podstawie pola wpisu: _id. Podczas korzystania z wanilii MongoDB z konsoli, co mogę zrobić:

db.products.find({"_id":ObjectId("51d151c6b918a71d170000c7")})

i poprawnie zwraca moją pozycję. Jednak, gdy robię to samo w węźle, na przykład:

db.products.find({"_id": ObjectId("51d151c6b918a71d170000c7")}, function (err, record) { 
    // Do stuff 
}); 

Dostaję ReferenceError: ObjectId is not defined.

Jaki jest prawidłowy protokół, aby to zrobić?

Odpowiedz

71

Trzeba wymagać funkcję objectID przed użyciem go:

var ObjectId = require('mongodb').ObjectID; 
+2

Użyłem 'var ObjectId = require (" mongojs "). ObjectId;', ale działa równie dobrze! Twoje zdrowie. – Jascination

+7

Lub ['require ('mangusta') .Schema.ObjectId'] (http://stackoverflow.com/questions/8111846/how-to-set-objectid-as-a-data-type-in-mongoose) – laggingreflex

+1

Schemat Mongoose nie zadziałał dla mnie. Mongodb tak. – PanMan

1

Jeśli używasz MongoJS, można zrobić:

var ObjectId = mongojs.ObjectId; 

Następnie

db.users.find({"_id": ObjectId(id)}, function(err, user){...} 
2

jeśli ciebie używają mangusty, możesz spróbować tego:

var mongoose = require('mongoose') 
usersSchema = mongoose.model('users'), 
mongoose.Types.ObjectId("<object_id>") 

usersSchema.find({"_id": mongoose.Types.ObjectId("<object_id>")}, function (err, record) { 
// Do stuff 
}); 
Powiązane problemy