sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo alternar un campo booleano en un documento con operación atómica?

En este momento, no creo que sea posible hacer esto con una sola operación. Los operadores bit a bit (http://www.mongodb.org/display/DOCS/Updating#Updating-%24bit) aún no tienen un '$xor' aunque tengo un parche para ello.

En este momento, la solución alternativa que creo es usar siempre '$ inc':

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

Luego, en lugar de verificar si es verdadero o falso, puede verificar si un elemento es "verdadero":

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

IE, está utilizando el operador de módulo para ver si es par o desigual con incluso "desarmado" y desigual siendo "ajustado". Si desea tener el comportamiento opuesto (es decir, buscar todos los elementos que no tienen el indicador establecido), utilice

[ 2, 0 ];