MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como alternar um campo booleano em um documento com operação atômica?


No momento, não acho que seja possível fazer isso com uma operação. Os operadores bit a bit (http://www.mongodb.org/display/DOCS/Updating#Updating-%24bit) ainda não possuem um '$xor', embora eu tenha um patch para ele.

No momento, a solução alternativa que penso é sempre usar '$ inc':
cl.update( { "_id": ...}, { '$inc' : { 'field' : 1 } } );

Então, em vez de verificar se é verdadeiro ou falso, você pode verificar se um item é "verdadeiro":
cl.find( { "_id": ..., 'field' : { '$mod' : [ 2, 1 ] } );

Ou seja, você está usando o operador de módulo para ver se é par ou desigual com mesmo sendo "não definido" e desigual sendo "definido". Se você quiser ter o comportamento oposto (ou seja, encontrar todos os itens que não têm o sinalizador definido), use
[ 2, 0 ];