MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come attivare un campo booleano in un documento con un'operazione atomica?

In questo momento, non credo sia possibile farlo con una sola operazione. Gli operatori bit per bit (http://www.mongodb.org/display/DOCS/Updating#Updating-%24bit) non hanno ancora un '$xor' anche se ho una patch per esso.

In questo momento la soluzione a cui penso è di usare sempre '$inc':

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

Quindi, invece di controllare vero o falso, puoi controllare se un elemento è "vero":

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

IE, stai usando l'operatore modulo per vedere se è pari o irregolare anche essendo "non impostato" e irregolare essendo "impostato". Se vuoi avere il comportamento opposto (cioè, trova tutti gli elementi che non hanno il flag impostato), usa

[ 2, 0 ];