Nie wiem, czego próbowałeś, ponieważ po prostu nie jest to zawarte w twoim pytaniu, ale najlepszym sposobem sprawdzenia, czy tablica jest pusta, jest po prostu sprawdzenie, gdzie 0
indeks nie pasuje do $exists
:
Inventory.update(
{ "products.rates.0": { "$exists": false } },
{
"$pull": {
"products": { "rates.0": { "$exists": false } }
}
},
{ "multi": true },
function(err,numAffected) {
}
)
Część "zapytanie" .update()
oświadczenie to upewnienie się, że próbujemy tylko dotknąć dokumentów, które mają pustą tablicę w "products.rates"
. Nie jest to wymagane, ale pozwala uniknąć testowania następującego warunku instrukcji „update” w dokumentach, w których warunek ten nie jest true
dla dowolnego elementu tablicy, dzięki czemu wszystko działa trochę szybciej.
Właściwa część dotycząca aktualizacji ma zastosowanie $pull
w "products"
tablica, aby usunąć dowolny z tych elementów, w których "wewnętrzny" "rates"
jest pustą tablicą. Tak więc „ścieżka” w $pull
faktycznie zagląda do wnętrza "products"
treść w każdym razie, więc odnosi się do tego, a nie do całego dokumentu.
Oczywiście $pull
usunie wszystkie elementy, które pasują do siebie w jednej operacji. "multi"
jest potrzebne tylko wtedy, gdy naprawdę chcesz zaktualizować więcej niż jeden dokument za pomocą wyciągu