2014-12-02 178 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