在mongoose schema nodejs中按ObjectIdsearch

我正在用nodejs使用mongoose。 我有下面给出的项目模式和用户模式。

var userSchema = new Schema({ email: { type: String, required: true, unique: true }, password: { type: String, required: true }, items : [{ type: Schema.Types.ObjectId, ref: 'Item' }] }); var itemSchema = new Schema({ name: { type: String, required: true }, _owner : { type: Schema.Types.ObjectId, ref: 'User' } }); 

我正在尝试通过用户id(项目模式中的_owner )来查找项目。

我试图直接find

 var uid = req.decoded._id; var item = Item.findOne({"_owner": uid}); console.log(item.name); // undefined 

通过search类似,我发现id需要在ObjectId对象,所以我试过

 var uid = new mongoose.Types.ObjectId(req.decoded._id); var item = Item.findOne({"_owner": uid}); console.log(item.name); // undefined 

在这两种情况下, item.name是未定义的。注意,我已经用db重新检查了req.decoded._id (通过打印)的值,所以它不是未定义的,并以db的forms出现。

有什么我做错了吗?

Model.findOne是一个asynchronous调用。 它不会返回文档,它会将其传递给您需要提供的作为第二个参数的callback函数。

 var uid = req.decoded._id; var item = Item.findOne({"_owner": uid}, function(err, item) { console.log(item.name); });