2012-05-22 43 views
5

Tôi muốn thực hiện nhiều cập nhật trên trường con "giá trị" phụ nếu trường "oid" và "instance" khớp với nhau. tôi có thể làm điều đó một subdocument tại một thời điểm, nhưng là có một cách để làm điều đó cho nhiềuNhiều tài liệu phụ cập nhật

- này làm việc cho một -

db.myTable.update({ "data" : { "$elemMatch" : { "oid" : "1.3.6.1.4.1.111.3.10.2.5.35.3", 
               "instance" : "0" } }, 
        "$atomic" : "true" }, 
        { $set: { "data.$.value": "change good" }}, 
        false, 
        true); 



    "_id" : 483, 
    "data" : [{ 
     "oid" : "1.3.6.1.4.1.111.3.10.2.5.35.3", 
     "instance" : "0", 
     "value" : "0" 
    }, { 
     "oid" : "1.3.6.1.4.1.111.3.999.2.5.2", 
     "instance" : "0", 
     "value" : "aaa" 
    }, { 
     "oid" : "1.3.6.1.4.1.111.3.30.5.1.1", 
     "instance" : "0", 
     "value" : "BBB" 
    }]} 
+0

Có thể bạn có thể sử dụng toán tử '$ hoặc' tại đây. –

+0

có thể trùng lặp của [Thay đổi tất cả tài liệu của tôi giá trị tài liệu lồng nhau] (http://stackoverflow.com/questions/10662779/change-all-my-documents-nested-document-value) – istepaniuk

Trả lời

8

Câu hỏi này đã được hỏi một vài lần already, nhưng không, bạn không thể làm điều này trong một lần. Để lặp lại câu trả lời:

Bạn sẽ phải tự làm điều này trong mã ứng dụng, bằng cách truy vấn tài liệu và lặp lại tất cả các tài liệu lồng nhau của bạn; và sau đó lưu nó trở lại MongoDB.

Để ngăn chặn điều kiện chủng tộc với điều này, xin vui lòng có một cái nhìn tại phần so sánh và trao đổi tại http://www.mongodb.org/display/DOCS/Atomic+Operations

Có hiện một vé mở cho điều này để thêm chức năng này để MongoDB. Bạn có thể muốn bỏ phiếu bầu: https://jira.mongodb.org/browse/SERVER-1243

+0

Câu hỏi và câu trả lời cũng cũ và mongodb jira vé thực sự đóng cửa trong năm nay! Tuy nhiên, khi tôi làm việc, chúng tôi chạy phiên bản cũ hơn của Mongo, vì vậy tôi đã viết một bằng chứng về khái niệm trong node.js về cách thực hiện lặp lại https://github.com/KATT/mongodb-deep-set – Alex

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