Nevím, co jste zkusili, protože to prostě není zahrnuto ve vaší otázce, ale nejlepší způsob, jak zkontrolovat prázdné pole, je v podstatě se podívat, kde je 0
index neodpovídá $exists
:
Inventory.update(
{ "products.rates.0": { "$exists": false } },
{
"$pull": {
"products": { "rates.0": { "$exists": false } }
}
},
{ "multi": true },
function(err,numAffected) {
}
)
Část "dotaz" .update()
prohlášení zajišťuje, že se i jen pokoušíme dotknout dokumentů, které mají prázdné pole v "products.rates"
. To není povinné, ale vyhnete se testování následující podmínky příkazu "update" na dokumentech, kde tato podmínka není true
pro jakýkoli prvek pole a tím se věci o něco zrychlují.
Skutečná část „aktualizace“ platí $pull
na "products"
pole k odstranění kterékoli z těch položek, kde je "vnitřní" "rates"
je prázdné pole. Tedy "cesta" v rámci $pull
se ve skutečnosti dívá do "products"
obsahu, takže je relativní k němu a ne k celému dokumentu.
Přirozeně $pull
odstraní všechny prvky, které se shodují v jediné operaci. "multi"
je potřeba pouze tehdy, když opravdu chcete aktualizovat více než jeden dokument pomocí výpisu