MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Fügen Sie Unique only zum Array hinzu und behalten Sie die Feldanzahl bei der Aktualisierung bei

Für diese Art von Operation sollten Sie nicht $addToSet da natürlich der $inc würde unabhängig davon passieren, ob dem Array etwas hinzugefügt wurde ("set" ) oder nicht.

Testen Sie die Arrays stattdessen mit $ne Operator in der Abfrage:

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

Dasselbe gilt für das Entfernen von Array-Mitgliedern, aber dieses Mal testen Sie natürlich mit Gleichheit auf das Vorhandensein:

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

Da die Abfragebedingung übereinstimmen muss, wenn das Array-Element beim Hinzufügen bereits vorhanden war, gibt es keine Übereinstimmung und auch nicht den $push oder $inc Operationen laufen. Und dasselbe gilt für $pull Fall, in dem das Element nicht im Array vorhanden ist.