MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Aggiungi Unique solo all'array e mantieni il conteggio dei campi all'aggiornamento

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.