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
på "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