2012-02-22 39 views
24

Làm cách nào để nhắm mục tiêu một subdocument trong mảng authors như được hiển thị bên dưới, để cập nhật nó?Cập nhật tài liệu phụ trong mongodb?

collection.update({'_id': "4f44af6a024342300e000001"}, {$set: { 'authors.?' }}) 

Tài liệu:

{ 
    _id:  "4f44af6a024342300e000001", 
    title: "A book", 
    created: "2012-02-22T14:12:51.305Z" 
    authors: [{"_id":"4f44af6a024342300e000002"}] 
} 

Trả lời

37

Bằng cách xác định vị trí thực tế của tài liệu nhúng như thế này:

// update _id field of first author  
collection.update({'_id': "4f44af6a024342300e000001"}, 
        {$set: { 'authors.0._id': "1" }}) 

Hoặc qua positional operator:

// update _id field of first matched by _id author  
collection.update({'_id': "4f44af6a024342300e000001", 
        //you should specify query for embedded document 
        'authors._id' : "4f44af6a024342300e000002" }, 
    // you can update only one nested document matched by query     
        {$set: { 'authors.$._id': "1" }}) 
+2

có một cách để cập nhật tất cả tài liệu lồng nhau? – BlaShadow

+0

Chỉ cần lưu ý, nếu bạn muốn cập nhật nhiều hơn so với tài liệu phù hợp đầu tiên trong bộ sưu tập, hãy đảm bảo thêm {multi: true} làm tham số thứ ba vào collection.update – dev

+0

điều này sẽ chèn một tài liệu phụ mới nếu nó không thoát ? – Pila

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