Til denne type operation bør du ikke bruge $addToSet
siden selvfølgelig $inc
ville ske, uanset om noget blev tilføjet til arrayet ("set") eller ej.
Test i stedet arrays med $ne
operatør i forespørgslen:
db.collection.update(
{ "unique_array": { "$ne": 18 } }, <-- existing element
{
"$push": { "unique_array": 18 },
"$inc": { "size_of_array": 1 }
}
)
Det samme gælder for at fjerne array-medlemmer, men selvfølgelig tester du denne gang for tilstedeværelsen med ligeværdighed:
db.collection.update(
{ "unique_array": 18 }, <-- existing element
{
"$pull": { "unique_array": 18 },
"$inc": { "size_of_array": -1 }
}
)
Da forespørgselsbetingelsen skal matche, hvis array-elementet allerede var til stede ved tilføjelsen, er der ingen match, og heller ikke $push
eller $inc
operationer køres. Og det samme gælder for $pull
tilfælde, hvor elementet ikke er til stede i arrayet.