MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Jak przełączyć pole logiczne w jednym dokumencie za pomocą operacji atomowej?

W tej chwili nie sądzę, że można to zrobić za pomocą jednej operacji. Operatory bitowe (http://www.mongodb.org/display/DOCS/Updating#Updating-%24bit) nie mają jeszcze „$xor”, chociaż mam na nie poprawkę.

Obecnie myślę o obejściu, o którym myślę, że zawsze używam „$inc”:

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

Następnie zamiast sprawdzać, czy dana pozycja jest prawdziwa czy fałszywa, możesz sprawdzić, czy pozycja jest „prawda”:

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

To znaczy, używasz operatora modulo, aby zobaczyć, czy jest parzysty, czy nieparzysty, z parzystym „nieustawionym”, a nieparzystym „ustawionym”. Jeśli chcesz zachować odwrotne zachowanie (tzn. znaleźć wszystkie elementy, które nie mają ustawionej flagi), użyj

[ 2, 0 ];


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $type Operator potoku agregacji

  2. Jak uruchomić powłokę mongodb w kontenerze docker?

  3. Limit rozmiaru pojedynczego dokumentu MongoDB wynosi 16 MB

  4. Ustaw domyślną datę podczas wstawiania dokumentu z godziną. Pole czasu

  5. Sortuj zagnieżdżoną tablicę obiektów