2014-12-02 43 views
8

içinde güncellenmesi nesneler Ben o zaman belirli bir beceri startDate güncellemeye çalışıyorumGelincik MongoDB: iç içe geçmiş bir dizide

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

aşağıdaki şema var.

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

Bu özel kod verir: err: Ben onlardan biri olmak, birçok değişik yollar denedim 'elemanını

gerçek nesnenin üstünden geçirmek için kısmını (skills._id becerilerini) kullanamazsınız yanlış yapıyorum

Herhangi bir fikir

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

} benziyor?

+0

bu yardım -http mu: //mongoosejs.com/docs/populate.html? – BatScream

cevap

16

Burada yaptığınız gibi bir modelde update numaralı telefonu aradığınızda, ilk belge, güncelleştirilecek belge zaten _id tarafından benzersiz olarak tanımlandığı için bu belgeye uygulanacak güncelleme işlemidir.

Bunun yerine, tüm bir operasyonda bunu Model.update kullanın:

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

Çok teşekkürler, bu işe yarıyor! Ben geçmişte denedim başka bir şey yanlış oldu sanırım doğru sonuç alamadım bu yüzden – DianeH

+0

'' '' '[1, 2, 3]' 'skill._id' için nasıl aranır. Denedim {'skills._id': {$ nin: [1, 2, 3]}} 'ama işe yaramadı. –