sql >> Databáze >  >> NoSQL >> MongoDB

Přidejte unikátní pouze do pole a ponechte počet polí při aktualizaci

Pro tento typ operace byste neměli používat $addToSet protože samozřejmě $inc by se stalo bez ohledu na to, zda bylo do pole ( "set" ) něco přidáno nebo ne.

Místo toho otestujte pole pomocí $ne operátor v dotazu:

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

Totéž platí pro odstranění členů pole, ale tentokrát samozřejmě otestujete přítomnost pomocí rovnosti:

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

Vzhledem k tomu, že podmínka dotazu se musí shodovat, pokud byl prvek pole již přítomen při přidávání, nedochází k žádné shodě a není k dispozici $push nebo $inc operace jsou spuštěny. A totéž platí pro $pull případ, kdy prvek není v poli přítomen.




  1. Chyba během mongoimportu

  2. mongoose rozdíl findOneAndUpdate a update

  3. Jak zorganizovat mnoho až mnoho vztahů v MongoDB

  4. Mongoose – efektivní aktualizace indexovaného pole mongoose.Schema.Types.Mixed