2014-12-02 62 views
8

Tôi đã có sơ đồ sauMongoose MongoDB: đối tượng cập nhật trong một mảng lồng nhau

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

tôi sau đó cố gắng cập nhật các STARTDATE của một kỹ năng đặc biệt. Tôi đã thử nhiều differents cách, một trong số đó là:

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

mã đặc biệt này cho phép: err: 'không thể sử dụng một phần (kỹ năng của skills._id) đi qua các yếu tố

Đối tượng thực tế trông giống như

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

}

Bất kỳ ý tưởng những gì tôi đang làm sai?

+0

Có trợ giúp này -http: //mongoosejs.com/docs/populate.html? – BatScream

Trả lời

16

Khi bạn gọi update trên ví dụ mẫu như bạn đang làm ở đây, thông số đầu tiên là thao tác cập nhật để áp dụng cho tài liệu đó, vì tài liệu cập nhật đã được xác định duy nhất bởi _id.

Thay vào đó, sử dụng Model.update để làm điều này tất cả trong một hoạt động:

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

Cảm ơn rất nhiều, công trình này! Tôi đã thử nó trong quá khứ bởi tôi đoán cái gì khác đã sai vì vậy đã không nhận được kết quả đúng – DianeH

+0

Làm thế nào để tìm 'skills._id' không trong' [1, 2, 3] '. Đã thử '{'skills._id': {$ nin: [1, 2, 3]}}' nhưng không hoạt động. –

Các vấn đề liên quan