2013-07-09 71 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 
});