MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment basculer un champ booléen dans un document avec une opération atomique ?

À l'heure actuelle, je ne pense pas qu'il soit possible de le faire en une seule opération. Les opérateurs au niveau du bit (http://www.mongodb.org/display/DOCS/Updating#Updating-%24bit) n'ont pas encore de '$xor' bien que j'aie un patch pour cela.

En ce moment, la solution de contournement à laquelle je pense est de toujours utiliser '$inc' :

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

Ensuite, au lieu de vérifier si vrai ou faux, vous pouvez vérifier si un élément est "vrai" :

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

IE, vous utilisez l'opérateur modulo pour voir s'il est pair ou inégal avec même étant "non défini" et inégal étant "défini". Si vous voulez avoir le comportement opposé (c'est-à-dire trouver tous les éléments qui n'ont pas l'indicateur défini), utilisez

[ 2, 0 ];