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