Не знам какво опитахте, тъй като просто не е включено във въпроса ви, но най-добрият начин да проверите за празен масив е основно да потърсите къде е 0
индексът не съвпада с $exists
:
Inventory.update(
{ "products.rates.0": { "$exists": false } },
{
"$pull": {
"products": { "rates.0": { "$exists": false } }
}
},
{ "multi": true },
function(err,numAffected) {
}
)
Частта „заявка“ на .update()
декларацията гарантира, че дори се опитваме да докоснем документи, които имат празен масив в "products.rates"
. Това не е задължително, но избягва тестването на следното условие на израза „актуализация“ върху документи, където това условие не е true
за всеки елемент от масива и по този начин прави нещата малко по-бързи.
Действителната част „актуализация“ се прилага $pull
на "products"
масив, за да премахнете всеки от тези елементи, където "вътрешните" "rates"
е празен масив. Така че "пътят" в $pull
всъщност търси вътре в "products"
съдържание така или иначе, така че е относително към това, а не към целия документ.
Естествено $pull
ще премахне всички елементи, които съвпадат в една операция. "multi"
е необходимо само когато наистина искате да актуализирате повече от един документ с израза