MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Добавете уникален само към масива и запазете броя на полето при актуализиране

За този тип операция не трябва да използвате $addToSet тъй като, разбира се, $inc ще се случи независимо дали нещо е добавено към масива ( "набор") или не.

Вместо това тествайте масивите с $ne оператор в заявката:

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

Същото важи и за премахването на членове на масива, но разбира се този път тествате за присъствие с равенство:

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

Тъй като условието на заявката трябва да съвпада, ако елементът на масива вече е присъствал при добавянето, тогава няма съвпадение и нито $push или $inc се изпълняват операции. Същото важи и за $pull случай, когато елементът не присъства в масива.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Уникалният индекс на Mongo не е чувствителен към малки и големи букви

  2. Вмъкнете данни във вътрешния масив в MongoDB

  3. Mongo shell изпълнява заявка от файл и показва резултат

  4. Внедряване на MongoDB във виртуален частен облак на Amazon (VPC)

  5. geoNear връща неправилно разстояние