sql >> Database >  >> NoSQL >> MongoDB

Alleen uniek aan array toevoegen en veldtelling bij update houden

Voor dit type bewerking mag u $addToSet aangezien natuurlijk de $inc zou gebeuren ongeacht of er iets aan de array werd toegevoegd ("set") of niet.

Test in plaats daarvan de arrays met de $ne operator in de zoekopdracht:

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

Hetzelfde geldt voor het verwijderen van arrayleden, maar deze keer test je natuurlijk op de aanwezigheid met gelijkheid:

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

Aangezien de queryvoorwaarde moet overeenkomen, is er geen overeenkomst als het array-element al aanwezig was bij het toevoegen en netiher de $push of $inc operaties worden uitgevoerd. En hetzelfde geldt voor de $pull geval waarin het element niet aanwezig is in de array.




  1. Mongo - zoekopdracht, ingesloten document komt niet overeen, behalve puntnotatie

  2. Implementeren voor alle klassen BsonIgnoreExtraElements

  3. Hoe unie-query's in mongoDB te schrijven?

  4. Moet ik de optie allowDiskUse gebruiken in een productomgeving?