sql >> Databasteknik >  >> NoSQL >> MongoDB

Lägg endast till Unique till array och håll fälträkning vid uppdatering

För denna typ av operation bör du inte använda $addToSet eftersom naturligtvis $inc skulle hända oavsett om något lades till i arrayen ("set") eller inte.

Testa istället arrayerna med $ne operatorn i frågan:

db.collection.update(
    { "unique_array": { "$ne": 18 } },    <-- existing element
    { 
        "$push": { "unique_array": 18 },
        "$inc": { "size_of_array": 1 }
    }
)

Detsamma gäller för att ta bort arraymedlemmar, men självklart testar du den här gången för närvaron med jämlikhet:

db.collection.update(
    { "unique_array": 18 },    <-- existing element
    { 
        "$pull": { "unique_array": 18 },
        "$inc": { "size_of_array": -1 }
    }
)

Eftersom frågevillkoret måste matcha, om arrayelementet redan fanns när det lades till finns det ingen matchning och inte heller $push eller $inc verksamhet bedrivs. Och detsamma gäller för $pull fall där elementet inte finns i arrayen.




  1. Hur implementerar jag sökfilterfråga med mongodb?

  2. ScaleGrid Fully Managed Hosting för Redis™ nu tillgängligt på Azure

  3. Strängfältsvärdeslängd i mongoDB

  4. Designa Redis databastabell som SQL?