यदि आपको "$pullAll को एक सरणी तर्क की आवश्यकता है, लेकिन एक डबल दिया गया था " MongoDB में त्रुटि, ऐसा इसलिए है क्योंकि आपने प्रतिस्थापित करने के लिए मान के रूप में एक सरणी प्रदान नहीं की है।
उदाहरण
मान लीजिए कि हमारे पास निम्नलिखित दस्तावेजों के साथ एक संग्रह है:
{ "_id" : 1, "bar" : [ 1, 7, 2, 3, 8, 7, 1 ] } { "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] } { "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }
और हम $pullAll
. का उपयोग करना चाहते हैं उन दस्तावेज़ों में से किसी एक में मूल्य की सभी घटनाओं को बदलने के लिए।
समस्या कोड
यहां कोड का एक उदाहरण दिया गया है जो उपरोक्त त्रुटि का कारण बनता है:
db.foo.update(
{ _id: 1 },
{ $pullAll: { bar: 7 } }
)
परिणाम:
WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0, "writeError" : { "code" : 2, "errmsg" : "$pullAll requires an array argument but was given a double" } })
ऐसा इसलिए हुआ क्योंकि हम 7
. मान को घेरना भूल गए थे चौकोर कोष्ठक के साथ। दूसरे शब्दों में, हम एक सरणी प्रदान करना भूल गए।
समाधान
यहाँ वही कोड है, इस समय को छोड़कर हमने एक सरणी के रूप में मान प्रदान किया है:
db.foo.update(
{ _id: 1 },
{ $pullAll: { bar: [ 7 ] } }
)
परिणाम:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
यह हमें दिखाता है कि एक दस्तावेज़ का मिलान और संशोधन किया गया था।
आइए अब इस संग्रह पर एक नज़र डालते हैं:
db.foo.find()
परिणाम:
{ "_id" : 1, "bar" : [ 1, 2, 3, 8, 1 ] } { "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] } { "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }
दस्तावेज़ को सफलतापूर्वक अपडेट कर दिया गया है।