我正在将 mongoose 与 nodejs 一起使用。我有下面给出的项目架构和用户架构。
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
)查找项目。
我尝试过直接查找
var uid = req.decoded._id;
var item = Item.findOne({"_owner": uid});
console.log(item.name); // undefined
通过搜索类似的内容,我发现 id 需要位于 ObjectId 对象中,所以我尝试了
var uid = new mongoose.Types.ObjectId(req.decoded._id);
var item = Item.findOne({"_owner": uid});
console.log(item.name); // undefined
在这两种情况下,item.name
都是未定义的。请注意,我已经使用数据库重新检查了 req.decoded._id
的值(通过打印),因此它没有未定义并存在于数据库中。
我是不是做错了什么?
最佳答案
Model.findOne
是一个异步调用。它不会返回文档,而是将其传递给您需要作为第二个参数提供的回调函数。
var uid = req.decoded._id;
var item = Item.findOne({"_owner": uid}, function(err, item) {
console.log(item.name);
});
关于node.js - 在mongoose模式nodejs中按ObjectId搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34558075/