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