2017-02-12 3 views
1

mein Schema Aktualisierungsfeld in Mungo, die den Zustand entspricht

{ 
    qty:{ 
     property1:{ 
      //something 
     } 
     property2:[{ 
      size:40, 
      color:"black", 
      enabled:"true" 
     }] 
    } 
} 

Eigenschaft 2 wie

aussieht, ist Array, was ich tun möchte, ist Update derjenigediejenigedasjenige Objekt Array, das aktiviert ist wahr, in einzelner Abfrage

ich mit dem Schreiben versucht, die folgende Abfrage

db.col.update({ 
    "qty.property2.enabled" = "true" 
}, { 
    "qty.property2.color" = "green" 
}, callback) 

aber es ist nicht

Fehler arbeiten:

[main] Error: can't have . in field names [qty.pro.size]

Antwort

2
db.col.update({"qty.property2.enabled":"true"},{$set: {'qty.property2.$.color': 'green'}}, {multi: true}) 

dies ist der Weg Element in Array zu aktualisieren.

  1. Gleichheitszeichen '=' kann nicht in Objekt
  2. Aktualisierung Array verwendet werden, erfolgt mit $
1

Angenommen, Ihr Documet sieht wie folgt aus.

{ 

    "_id" : ObjectId("4f9808648859c65d"), 

    "array" : [ 

     {"text" : "foo", "value" : 11}, 

     {"text" : "foo", "value" : 22}, 

     {"text" : "foobar", "value" : 33} 

    ] 

} 

dann wird Ihre Anfrage

db.foo.update({"array.value" : 22}, {"$set" : {"array.$.text" : "blah"}}) 

, wo erste geschweifte Klammern Abfragekriterien darstellt und zweite setzt den neuen Wert.

Verwandte Themen