2014-12-02 138 views
8

更新对象我有以下模式猫鼬的MongoDB:嵌套数组中

var UserSchema = new Schema({ 
    emp_no: Number, 
    skills: [{ 
    skill: { 
     type: Schema.Types.ObjectId, 
     ref: 'Skill' 
    }, 
    startDate: {type: Date}, 
    }] 
}); 

我然后尝试更新一个特定的技能的起始日期。我试过几种方法型动物,其中之一是:

User.findOne({emp_no: req.body.emp_no}, function (err, user) { 
    user.update({'skills._id': 123}, {'$set': { 
     'skills.$.startDate': req.body.startDate   
    }} 
} 

这种特殊的代码给出:错误:“不能使用的部分(skills._id的技能)横贯元件

实际的对象貌似

{ 
"_id" : ObjectId("5469753de27a7c082203fd0a"), 
"emp_no" : 123, 
"skills" : [ 
    { 
     "skill" : ObjectId("547d5f3021d99d302079446d"), 
     "startDate" : ISODate("2014-12-02T06:43:27.763Z") 
     "_id" : ObjectId("547d5f8f21d99d3020794472") 
    } 
], 
"__v" : 108 

}

任何想法我做错了吗?

+0

这是否帮助-http://mongoosejs.com/docs/populate.html? – BatScream 2014-12-02 23:05:00

回答

16

当您在模型实例上调用update时,就像在这里所做的那样,第一个参数是适用于该文档的更新操作,因为要更新的文档已由其_id唯一标识。

相反,使用Model.update做到这一切在一个操作:

User.update(
    {emp_no: req.body.emp_no, 'skills._id': 123}, 
    {'$set': { 
     'skills.$.startDate': req.body.startDate   
    }}, 
    function(err, numAffected) {...} 
); 
+0

非常感谢,这工作!我曾尝试过,我猜别的东西是错的,所以没有得到正确的结果 – DianeH 2014-12-03 02:53:23

+0

如何在'[1,2,3]中寻找'skills._id'。试过'{'skills._id':{$ nin:[1,2,3]}}'但没有奏效。 – 2015-07-01 16:57:57