MongoDB में, जब आप सरणियों वाले दस्तावेज़ों को अपडेट करते हैं, तो आपके पास arrayFilters का उपयोग करने का विकल्प होता है पैरामीटर।
arrayFilters पैरामीटर आपको फ़िल्टर दस्तावेज़ों की एक सरणी निर्दिष्ट करने की अनुमति देता है जो निर्धारित करता है कि कौन से सरणी तत्वों को संशोधित करना है।
अद्यतन दस्तावेज़ में, $[<identifier>] . का उपयोग करें फ़िल्टर किए गए स्थितीय ऑपरेटर, जो arrayFilters . से मेल खाने वाले सरणी तत्वों की पहचान करता है अद्यतन संचालन के लिए शर्तें।
सिंटैक्स
वाक्य रचना इस प्रकार है:
{ <update operator>: { "<array>.$[<identifier>]" : value } },
{ arrayFilters: [ { <identifier>: <condition> } ] }
तो उदाहरण के लिए, जब updateMany() . के साथ प्रयोग किया जाता है विधि, यह इस प्रकार है:
db.collection.updateMany(
{ <query conditions> },
{ <update operator>: { "<array>.$[<identifier>]" : value } },
{ arrayFilters: [ { <identifier>: <condition> } ] }
) उदाहरण
मान लीजिए हमारे पास players . नामक संग्रह है निम्नलिखित दस्तावेजों के साथ:
{ "_id" : 1, "scores" : [ 1, 5, 17 ] }
{ "_id" : 2, "scores" : [ 8, 17, 18 ] }
{ "_id" : 3, "scores" : [ 15, 11, 8 ] }
हम arrayFilters . का उपयोग कर सकते हैं पैरामीटर केवल उन सरणी तत्वों को अपडेट करने के लिए जिनका मान एक निश्चित राशि से अधिक है।
उदाहरण:
db.players.updateMany(
{ scores: { $gte: 10 } },
{ $set: { "scores.$[e]" : 10 } },
{ arrayFilters: [ { "e": { $gte: 10 } } ] }
) परिणाम:
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 } संदेश हमें बताता है कि तीन दस्तावेज़ों का मिलान और संशोधन किया गया था।
दस्तावेज़ अब इस तरह दिखते हैं।
db.players.find() परिणाम:
{ "_id" : 1, "scores" : [ 1, 5, 10 ] }
{ "_id" : 2, "scores" : [ 8, 10, 10 ] }
{ "_id" : 3, "scores" : [ 10, 10, 8 ] } हम देख सकते हैं कि सभी मान जो पहले 10 से अधिक या उसके बराबर थे, अब 10 हैं।
इस मामले में, मैंने e . का इस्तेमाल किया <identifier> के रूप में . ध्यान दें कि <identifier> लोअरकेस अक्षर से शुरू होना चाहिए और इसमें केवल अल्फ़ान्यूमेरिक वर्ण होने चाहिए।