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

Hvordan skifter man et boolesk felt i ét dokument med atomar drift?

Lige nu tror jeg ikke det er muligt at gøre det her med én operation. De bitvise operatorer (http://www.mongodb.org/display/DOCS/Updating#Updating-%24bit) har ikke en '$xor' endnu, selvom jeg har en patch til det.

Lige nu er den løsning, jeg tænker på, ved altid at bruge '$inc':

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

Så i stedet for at tjekke for sand eller falsk, kan du kontrollere, om et element er "sandt":

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

IE, du bruger modulo-operatoren til at se, om det er lige eller ujævnt med selv at være "unset", og ujævnt at være "set". Hvis du vil have den modsatte adfærd (dvs. finde alle elementer, der ikke har flaget sat), så brug

[ 2, 0 ];


  1. Flere Redis-forekomster

  2. Ufølsom søgning i Mongo

  3. Django - Sådan bruger du asynkron opgavekø med selleri og redis

  4. Samlet $lookup Den samlede størrelse af dokumenter i matchende pipeline overstiger den maksimale dokumentstørrelse