MongoDB-এ অ্যারেতে থাকা সাব-ডকুমেন্টে নতুন ফিল্ড যোগ করতে update() মেথড সহ $set এবং ডট নোটেশন (array index সহ) ব্যবহার করুন।
উদাহরণ
সাব-ডকুমেন্ট অ্যারে সহ ডকুমেন্ট তৈরি করুন:
> db.addExtraFieldDemo.insertOne({
"_id": 1,
"UserName": "Larry",
"UserOtherDetails": [
{ "UserCountryName": "US", "UserAge": 23 },
{ "UserCountryName": "UK", "UserAge": 24 }
]
});
{ "acknowledged" : true, "insertedId" : 1 }
ডকুমেন্টটি দেখুন:
> db.addExtraFieldDemo.find().pretty();
আউটপুট:
{ "_id" : 1, "UserName" : "Larry", "UserOtherDetails" : [ { "UserCountryName" : "US", "UserAge" : 23 }, { "UserCountryName" : "UK", "UserAge" : 24 } ] }
প্রথম সাব-ডকুমেন্টে (ইনডেক্স ০) isMarried_ ফিল্ড যোগ করা
> db.addExtraFieldDemo.update(
{ "_id": 1 },
{ "$set": { "UserOtherDetails.0.isMarried_": true } }
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
আপডেট হওয়ার পর ডকুমেন্টটি যাচাই করুন:
> db.addExtraFieldDemo.find().pretty();
আউটপুট:
{ "_id" : 1, "UserName" : "Larry", "UserOtherDetails" : [ { "UserCountryName" : "US", "UserAge" : 23, "isMarried_" : true }, { "UserCountryName" : "UK", "UserAge" : 24 } ] }
ব্যাখ্যা:
UserOtherDetails.0.isMarried_— ডট নোটেশন দিয়ে অ্যারে ইনডেক্স0(প্রথম এলিমেন্ট) এর ফিল্ড সেট করা হয়েছে।$set— ফিল্ড না থাকলে তৈরি করে, থাকলে আপডেট করে।- দ্বিতীয় এলিমেন্ট (ইনডেক্স ১) অপরিবর্তিত রয়েছে।
সতর্কতা: ইনডেক্সভিত্তিক আপডেটে অ্যারে অর্ডার পরিবর্তন হলে ভুল এলিমেন্ট আপডেট হতে পারে। নিরাপদ পদ্ধতিতে $elemMatch + $ (পজিশনাল) বা arrayFilters (MongoDB ৩.৬+) ব্যবহার করুন।
বিকল্প (arrayFilters - MongoDB ৩.৬+):
db.addExtraFieldDemo.update(
{ "_id": 1 },
{ "$set": { "UserOtherDetails.$[elem].isMarried_": true } },
{ arrayFilters: [{ "elem.UserCountryName": "US" }] }
);