स्थितिगत $ का उपयोग करने का प्रयास करें ऑपरेटर
अद्यतन में जो सरणी में तत्व की स्थिति को स्पष्ट रूप से निर्दिष्ट किए बिना अद्यतन करने के लिए एक सरणी में एक तत्व की पहचान करता है, लेकिन यह एक समय में केवल एक तत्व से मेल खाएगा:
User.update(
{
"local.email": user,
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
},
{
"$set": {
"devices.$.id": deviceID,
"devices.$.name": deviceName
}
}
);
दस्तावेज़ों से , स्थितीय $ ऑपरेटर क्वेरी दस्तावेज़ से मेल खाने वाले पहले तत्व के लिए प्लेसहोल्डर के रूप में कार्य करता है, और सरणी फ़ील्ड को क्वेरी दस्तावेज़ के भाग के रूप में प्रकट होना चाहिए, इसलिए क्वेरी दस्तावेज़
"devices.id": { "$ne": deviceID },
"devices.name": { "$ne": deviceName }
इसमें device शामिल है सरणी और उन दस्तावेज़ों से मेल खाएगा जहाँ device सरणी id deviceID . के बराबर नहीं है और नाम उस नाम के समान नहीं है जिसे आप अद्यतन करने का प्रयास कर रहे हैं। यह उन दस्तावेज़ों से भी मेल खाएगा जहाँ device सरणी खाली है।