2012-05-22 13 views
5

Chciałbym wykonać wiele aktualizacji na "wartości" poddokumentów, jeśli pola "oid" i "instancja" są zgodne. mogę to zrobić jeden dokument podrzędny na raz, ale czy jest jakiś sposób, aby to zrobić dla wieluDokument pod wieloma zmianami

- To działa na jeden -

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

Może mógłbyś użyć operatora '$ lub' tutaj. –

+0

możliwy duplikat [Zmień całą wartość mojego zagnieżdżonego dokumentu] (http://stackoverflow.com/questions/10662779/change-all-my-documents-nested-document-value) – istepaniuk

Odpowiedz

8

To pytanie zostało zadane kilka razy already, ale nie, nie możesz tego zrobić za jednym razem. Aby powtórzyć odpowiedź:

Trzeba będzie zrobić samemu w kodzie aplikacji, przez zapytań dokument, a zapętlenie nad wszystkich zagnieżdżonych dokumentów; , a następnie zapisz go z powrotem na MongoDB.

W celu uniknięcia warunków wyścigu z tym, proszę spojrzeć na sekcja porównywania i wymiany Co http://www.mongodb.org/display/DOCS/Atomic+Operations

Obecnie otwarty bilet na to, aby dodać tę funkcjonalność do MongoDB. Może chcesz go oddać w górę: https://jira.mongodb.org/browse/SERVER-1243

+0

Stare pytanie i odpowiedź oraz mongodb jira bilet faktycznie jest zamknięty w tym roku! Jednak tam, gdzie pracuję, uruchamiamy starszą wersję Mongo, więc napisałem proof of concept w pliku node.js, jak to zrobić iteracyjnie https://github.com/KATT/mongodb-deep-set – Alex

Powiązane problemy