2016-04-15 8 views
1

Ich habe folgende Skript ausgeführt, um Daten mit $ oder Operator zu aktualisieren.

db.getCollection('test').update( 
    {$or: [{c1:true, c2: true }] } , 
    {$set: {rs: true }}, 
    {multi:true} 
) 

Es wurde erwartet, dass alle folgenden Zeilen aktualisiert werden sollen, aber die Zeile nur 3 & 4 waren, wie $ oder arbeiten als $ und.

/* 1 */ { "c1": true }

/* 2 */ { "c2": true }

/* 3 */ { "c1": true, "c2": true }

/* 4 */ { "c1": true, „c2“: true}

Hier ist der Screenshot: http://i.stack.imgur.com/A5Qhn.jpg

Antwort

1

Die $or Abfrage Betreiber eine Reihe von Abfrageausdruck Objekte nimmt, aber Sie vorbei sind beide Begriffe in einem einzigen Objekt, als machen verhalten ein UND.

Stattdessen setzen sich $or Begriff in seinem eigenen Objekt im Array wie folgt aus:

db.getCollection('test').update( 
    {$or: [{c1:true}, {c2: true}]}, 
    {$set: {rs: true}}, 
    {multi:true} 
) 
+0

Vielen Dank für Ihre Antwort, die funktioniert! Ich bin neu zu mongodb und gewöhne mich an die Abfrage im nosql-Stil. –

Verwandte Themen