2013-07-09 74 views
30

我在Node中使用MongoDb(作爲MongoJS的一部分)。 Here is the documentation for MongoJS通過節點'_id'搜索MongoDB條目的正確方法

我試圖在節點內根據條目的_id字段進行呼叫。當使用香草MongoDB從控制檯,我可以這樣做:

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

並正確返回我的條目。但是,當我在Node中做同樣的事情時,如:

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

我得到ReferenceError: ObjectId is not defined

這樣做的正確協議是什麼?

回答

71

您需要要求的ObjectId功能使用前:

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

我使用了'var ObjectId = require(「mongojs」)。ObjectId;',但它的工作原理也一樣!乾杯。 – Jascination

+7

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

+1

貓鼬模式一個不適合我。 Mongodb做到了。 – PanMan

1

如果您正在使用MongoJS,你可以這樣做:

var ObjectId = mongojs.ObjectId; 

然後,

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

,如果你正在使用貓鼬,你可以試試這個:

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 
});