पता नहीं आपने क्या प्रयास किया क्योंकि यह आपके प्रश्न में शामिल नहीं है, लेकिन एक खाली सरणी की जांच करने का सबसे अच्छा तरीका मूल रूप से यह देखना है कि 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"
इसकी आवश्यकता केवल तब होती है जब आप वास्तव में कथन के साथ एक से अधिक दस्तावेज़ों को अपडेट करना चाहते हैं