Per questo tipo di operazione non dovresti usare $addToSet
poiché ovviamente il $inc
accadrebbe indipendentemente dal fatto che qualcosa sia stato aggiunto all'array ("set") o meno.
Prova invece gli array con $ne
operatore nella query:
db.collection.update(
{ "unique_array": { "$ne": 18 } }, <-- existing element
{
"$push": { "unique_array": 18 },
"$inc": { "size_of_array": 1 }
}
)
Lo stesso vale per la rimozione dei membri dell'array, ma ovviamente questa volta si verifica la presenza con uguaglianza:
db.collection.update(
{ "unique_array": 18 }, <-- existing element
{
"$pull": { "unique_array": 18 },
"$inc": { "size_of_array": -1 }
}
)
Poiché la condizione della query deve corrispondere, se l'elemento dell'array era già presente durante l'aggiunta, non c'è corrispondenza e nemmeno $push
o $inc
le operazioni vengono eseguite. E lo stesso vale per $pull
caso in cui l'elemento non è presente nell'array.