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

Dodaj Unique tylko do tablicy i zachowaj liczbę pól podczas aktualizacji

W przypadku tego typu operacji nie należy używać $addToSet ponieważ oczywiście $inc stanie się niezależnie od tego, czy coś zostało dodane do tablicy ( "set" ), czy nie.

Zamiast tego przetestuj tablice za pomocą $ne operator w zapytaniu:

db.collection.update(
    { "unique_array": { "$ne": 18 } },    <-- existing element
    { 
        "$push": { "unique_array": 18 },
        "$inc": { "size_of_array": 1 }
    }
)

To samo dotyczy usuwania członków tablicy, ale oczywiście tym razem testujesz obecność z równością:

db.collection.update(
    { "unique_array": 18 },    <-- existing element
    { 
        "$pull": { "unique_array": 18 },
        "$inc": { "size_of_array": -1 }
    }
)

Ponieważ warunek zapytania musi być zgodny, jeśli element tablicy był już obecny podczas dodawania, nie ma dopasowania, a ponadto $push lub $inc prowadzone są operacje. To samo dotyczy $pull przypadek, w którym element nie jest obecny w tablicy.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak wyeksportować wyniki zapytania MongoDB do pliku CSV

  2. Wyszukiwanie pełnotekstowe MongoDB ze sterownikiem haskell

  3. Jak zdobyć obiekt rurociągu w Scrapy Spider

  4. Przykład niestandardowego detektora zdarzeń w dokumentacji Grails

  5. MongooseJS/MongoDB wyszukaj dokładną frazę