यहाँ समस्या यह है कि आप कुछ चीजों को गलत समझ रहे हैं।
जब आप "outerArray.field.innerArray": { $in: [ 1, 3 ] }
आपकी क्वेरी में, आपको केवल innerArray
नहीं मिल रहा है जहाँ 1 या 3 है। आपको दस्तावेज़ मिल रहे हैं जहाँ ये सरणियाँ मौजूद हैं।
तो आप पूरे दस्तावेज़ को क्वेरी कर रहे हैं।
आपको arrayFilter
का उपयोग करना होगा
फ़िल्टर मिलान होने पर मानों को अपडेट करने के लिए।
इसलिए, अगर मैं आपको सही ढंग से समझ पाया हूं, तो आप जो प्रश्न चाहते हैं वह है:
db.collection.update(
{}, //Empty object to find all documents
{
$push: { "outerArray.$[elem].field.innerArray": 4 }
},
{
"arrayFilters": [ { "elem.field.innerArray": { $in: [ 1, 3 ] } } ]
})
उदाहरण यहां
ध्यान दें कि पहला ऑब्जेक्ट update
. में कैसे है खाली है। आपको दस्तावेज़ से मेल खाने के लिए फ़ील्ड रखना होगा (सरणी नहीं, दस्तावेज़)।
यदि आप केवल एक दस्तावेज़ को अपडेट करना चाहते हैं तो आपको पहले ऑब्जेक्ट (क्वेरी ऑब्जेक्ट) को अपने इच्छित मानों से भरना होगा, उदाहरण के लिए:{"_id": 11}
।