För denna typ av operation bör du inte använda $addToSet
eftersom naturligtvis $inc
skulle hända oavsett om något lades till i arrayen ("set") eller inte.
Testa istället arrayerna med $ne
operatorn i frågan:
db.collection.update(
{ "unique_array": { "$ne": 18 } }, <-- existing element
{
"$push": { "unique_array": 18 },
"$inc": { "size_of_array": 1 }
}
)
Detsamma gäller för att ta bort arraymedlemmar, men självklart testar du den här gången för närvaron med jämlikhet:
db.collection.update(
{ "unique_array": 18 }, <-- existing element
{
"$pull": { "unique_array": 18 },
"$inc": { "size_of_array": -1 }
}
)
Eftersom frågevillkoret måste matcha, om arrayelementet redan fanns när det lades till finns det ingen matchning och inte heller $push
eller $inc
verksamhet bedrivs. Och detsamma gäller för $pull
fall där elementet inte finns i arrayen.