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

Tilføj kun Unique til array og hold felttælling ved opdatering

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.




  1. Deserialisering af MongoDB BSON

  2. Mongodb Opdater mange

  3. MongoDB geospatial forespørgsel med $not

  4. Sømløs skala til dine MongoDB-servere