За този тип операция не трябва да използвате $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
случай, когато елементът не присъства в масива.