MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie schalte ich ein boolesches Feld in einem Dokument mit atomarer Operation um?

Im Moment glaube ich nicht, dass dies mit einer Operation möglich ist. Die bitweisen Operatoren (http://www.mongodb.org/display/DOCS/Updating#Updating-%24bit) haben noch kein '$xor', obwohl ich einen Patch dafür habe.

Im Moment denke ich an die Problemumgehung, indem ich immer '$inc' verwende:

cl.update( { "_id": ...}, { '$inc' : { 'field' : 1 } } );

Anstatt auf wahr oder falsch zu prüfen, können Sie dann prüfen, ob ein Element "wahr" ist:

cl.find( { "_id": ..., 'field' : { '$mod' : [ 2, 1 ] } );

IE, Sie verwenden den Modulo-Operator, um zu sehen, ob er gerade oder ungerade ist, wobei sogar "ungesetzt" und ungerade "gesetzt" wird. Wenn Sie das entgegengesetzte Verhalten haben möchten (dh alle Elemente finden, bei denen das Flag nicht gesetzt ist), verwenden Sie

[ 2, 0 ];