2016-10-09 3 views
0

Haben Sie ein ziemlich tief geschachteltes Dokument, ein Teil der Verschachtelung enthält ein Objekt, das ein Hash der ObjectIDs und ein entsprechendes Objekt ist. Ich muss alle Dokumente in der Auflistung aktualisieren, indem Sie nur einen Wert in dem verschachtelten Objekt aktualisieren. So bin ich mir bewusst, dass, wenn ich eine Struktur wie gehabt:MongoDB-Dokument mit einem Platzhalter in Feldname aktualisieren

{ 
    "name" : "Bob", 
    "address" : { 
    "street" : "123 Baker St" 
    } 
} 

ich alles „Straße“ Werte mit dem folgenden Shell-Befehl aktualisieren kann:

db.mycollection.update({}, {$set : {"address.street" : "124 Baker St"}}, {multi: true}); 

Aber in meinem Fall der Struktur isn‘ t so einfach, es hat diese UUIDs drin, und ich möchte alles aktualisieren. Die Struktur ist wie folgt aus:

{ 
    "name": "Bob", 
    "addresses" : { 
    "0934029572035702834234092834" : { 
     "street" : "123 Baker St" 
     }, 
    "0904958304959879873876862378" : { 
     "street" : "123 Baker St" 
     } 
    } 
} 

OK < kein gutes Beispiel b/c in der realen Welt würden Sie nicht diese Adressen ändern wollen gleich sein, aber für einen Augenblick an, die ich tue. Wie bekomme ich alle Dokumente, um alle "street" -Werte im verschachtelten "addresses" -Objekt zu ändern, ohne OID by OID zu machen?

+0

Ist das wirklich Ihre Dokumentstruktur? Ich würde sehr empfehlen, es wenn möglich zu ändern. Ich würde erwarten, so etwas wie: { „Name: "Bob", "Adressen": [{ "type": "Ihre seltsamen guid wie Dingen", "Straße": "123 Baker St"}, { Typ: "your 2nd guid dingy" "Straße": "123 Baker St"}]} Auf diese Weise können Sie die Array-Elemente aktualisieren.Sie aktualisieren Struktur erzwingt einen Update-Befehl wie "addresss.yourguidthingy.street": "new Straße "anstelle eines Array-Elements update wie" addresss.street ":" new street ". Hoffe, es ist ein bisschen klar ... – HoefMeistert

+0

Wie gesagt, es ist ein bisschen ein künstliches Beispiel (ich bin nicht wirklich in Adressen) , aber ja, das verschachtelte Dokument verwendet einen GUID-Schlüssel und einen Objektwert für jedes Element im übergeordneten verschachtelten Dokument.Vielleicht ist ein besseres Beispiel, dass sie repres darstellen Daten Snapshots, aber ich habe in eine Situation geraten, in der der Snapshot-Verlauf eine Eigenschaft haben muss, die über alle Snapshots hinweg aktualisiert wird. – Paul

Antwort

0

ich nehme an, Sie wissen, dass die UUID: P Es ist kein Array, sondern verschachtelte Dokumentstruktur, die wie zu einem Update-Befehl kommt:

db.mycollection.update({}, {$set : {"addresses.0934029572035702834234092834.street" : "124 Baker St"}}, {multi: true});