Para este tipo de operación no debe usar $addToSet
ya que por supuesto el $inc
ocurriría independientemente de si se agregó algo a la matriz ("set") o no.
En su lugar, pruebe las matrices con $ne
operador en la consulta:
db.collection.update(
{ "unique_array": { "$ne": 18 } }, <-- existing element
{
"$push": { "unique_array": 18 },
"$inc": { "size_of_array": 1 }
}
)
Lo mismo ocurre con la eliminación de miembros de la matriz, pero, por supuesto, esta vez prueba la presencia con igualdad:
db.collection.update(
{ "unique_array": 18 }, <-- existing element
{
"$pull": { "unique_array": 18 },
"$inc": { "size_of_array": -1 }
}
)
Dado que la condición de consulta debe coincidir, si el elemento de la matriz ya estaba presente cuando se agregó, entonces no hay coincidencia y tampoco $push
o $inc
se ejecutan las operaciones. Y lo mismo ocurre con el $pull
caso donde el elemento no está presente en la matriz.