MongoDB में एक सरणी के अंदर एकल तत्व को अपडेट करने के लिए, स्थिति ऑपरेटर $ (पहले मिलान वाले तत्व के लिए) के साथ $inc का उपयोग करें ताकि संख्यात्मक फील्ड बढ़ाया जा सके।
उदाहरण: उत्पाद विवरण संग्रह
> db.demo39.insertOne({"ProductDetails":[{"ProductName":"Product-1","ProductPrice":349}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e176d54cfb11e5c34d898df") }
> db.demo39.insertOne({"ProductDetails":[{"ProductName":"Product-2","ProductPrice":998}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e176d61cfb11e5c34d898e0") }
> db.demo39.insertOne({"ProductDetails":[{"ProductName":"Product-3","ProductPrice":145}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e176d6acfb11e5c34d898e1") }
दस्तावेज़ देखना
> db.demo39.find();
आउटपुट: प्रत्येक में एक उत्पाद वाली सरणी के साथ तीन दस्तावेज़।
विशिष्ट दस्तावेज़ में विशिष्ट उत्पाद मूल्य बढ़ाएं
> db.demo39.update(
{ "_id" : ObjectId("5e176d61cfb11e5c34d898e0"), 'ProductDetails.ProductName':"Product-2" },
{ $inc: { 'ProductDetails.$.ProductPrice': 1 } }
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
परिणाम जांचें
> db.demo39.find();
आउटपुट: Product-2 की कीमत अब 999 है; अन्य अपरिवर्तित।
व्याख्या
- फिल्टर दस्तावेज़ को
_idद्वारा और सरणी तत्व कोProductNameद्वारा पहचानता है। $(स्थिति ऑपरेटर) फिल्टर से मेल खाने वाले पहले सरणी तत्व को संदर्भित करता है।$incउस तत्व केProductPriceको 1 से बढ़ाता है।
सभी मिलान वाले तत्वों को अपडेट करने के लिए (MongoDB 3.6+)
पहले मिलान के बजाय सभी मिलान वाले सरणी तत्वों को अपडेट करने के लिए, फ़िल्टर्ड स्थितीय ऑपरेटर $[<identifier> के साथ arrayFilters का उपयोग करें:
> db.demo39.update(
{ "ProductDetails.ProductName": "Product-2" },
{ $inc: { "ProductDetails.$[elem].ProductPrice": 1 } },
{ arrayFilters: [ { "elem.ProductName": "Product-2" } ] }
);
नोट
पुराना update() विरासत है; नए कोड में updateOne()/updateMany() पसंद करें।