sql >> Databasteknik >  >> NoSQL >> MongoDB

Ta bort arrayposter som innehåller en tom array

Vet inte vad du försökte eftersom det helt enkelt inte ingår i din fråga, men det bästa sättet att leta efter en tom array är att i princip titta var 0 index matchar inte $exists :

Inventory.update(
    { "products.rates.0": { "$exists": false } },
    { 
        "$pull": {
            "products": { "rates.0": { "$exists": false } }
        }
    },
    { "multi": true },
    function(err,numAffected) {

    }
)

"Fråge"-delen av .update() uttalandet ser till att vi bara försöker röra dokument som har en tom array i "products.rates" . Det är inte nödvändigt, men det undviker att testa följande "uppdatering"-satsvillkor på dokument där det villkoret inte är true för vilket arrayelement som helst och gör saker och ting lite snabbare.

Den faktiska "uppdatering"-delen gäller $pull "products" array för att ta bort något av de objekt där "inre" "rates" är en tom array. Så "sökvägen" inom $pull tittar faktiskt in i "products" innehåll i alla fall, så det är relativt till det och inte till hela dokumentet.

Naturligtvis $pull tar bort alla element som matchar i en enda operation. "multi" behövs bara när du verkligen vill uppdatera mer än ett dokument med uttalandet




  1. Vårdata MongoDB-transaktioner

  2. Lagra platsdata i Mongodb-dokument

  3. Det gick inte att starta mongod.service:Enheten mongod.service hittades inte

  4. Profilering av MongoDB-databasen för att se de utförda frågorna