Voor dit type bewerking mag u $addToSet
aangezien natuurlijk de $inc
zou gebeuren ongeacht of er iets aan de array werd toegevoegd ("set") of niet.
Test in plaats daarvan de arrays met de $ne
operator in de zoekopdracht:
db.collection.update(
{ "unique_array": { "$ne": 18 } }, <-- existing element
{
"$push": { "unique_array": 18 },
"$inc": { "size_of_array": 1 }
}
)
Hetzelfde geldt voor het verwijderen van arrayleden, maar deze keer test je natuurlijk op de aanwezigheid met gelijkheid:
db.collection.update(
{ "unique_array": 18 }, <-- existing element
{
"$pull": { "unique_array": 18 },
"$inc": { "size_of_array": -1 }
}
)
Aangezien de queryvoorwaarde moet overeenkomen, is er geen overeenkomst als het array-element al aanwezig was bij het toevoegen en netiher de $push
of $inc
operaties worden uitgevoerd. En hetzelfde geldt voor de $pull
geval waarin het element niet aanwezig is in de array.