Mongo:查询subdocs

时间:2013-09-09 08:20:27

标签: node.js mongoose database-schema

你好我在推送新的子文档之前检查是否存在子文档时遇到此问题。

var UserSchema = new Schema({
   name        : String,
   app_key     : String,
   app_secret  : String,
   tasks       : [{type: Schema.ObjectId, ref: 'Task'}] // assuming you name your model Task 
});

var TaskSchema = new Schema({
   name            : String,
   lastPerformed   : Date,
   folder          : String,
   user            : {type: Schema.ObjectId, ref: 'User'} // assuming you name your model User
});

有了这个,您对所有用户的查询,包括他们的任务数组可能是:

User.findOne({...}).populate('tasks').run(function(err, user) {
    var subdoc = user.tasks.id(mytask.id);
    if(subdoc){
        //not exist
        //push
    }
});

这是错误:

TypeError: Object  has no method 'id'

1 个答案:

答案 0 :(得分:1)

您收到该错误,因为没有为“tasks”子文档定义“id”字段。您可能需要'user.tasks。 _id ',它将返回MongoDB默认添加到其文档中的ObjectId。