কম্পিউটার টিউটোরিয়াল

MongoDB-এ অ্যারে সাব-ডকুমেন্ট আপডেট: $set ও পজিশনাল $ অপারেটর


অ্যারে সাব-ডকুমেন্ট আপডেট: পজিশনাল $ অপারেটর

MongoDB-এ একটি অ্যারে সাব-ডকুমেন্টের নির্দিষ্ট ফিল্ড আপডেট করতে updateOne() সহ পজিশনাল $ অপারেটর ব্যবহার করা হয়। এটি কোয়েরিতে ম্যাচ করা অ্যারে এলিমেন্টের ইনডেক্সকে রিপ্রেজেন্ট করে।

নমুনা ডেটা তৈরি

> db.demo462.insertOne({
    "id": 1,
    "DueDateDetails": [
        { "Name": "David", "Age": 21, "CountryName": ["US", "UK"] },
        { "Name": "Chris", "Age": 23, "CountryName": ["UK"] }
    ]
})

সমস্ত ডকুমেন্ট দেখানো

> db.demo462.find()

আউটপুট:

{ "_id": ObjectId("..."), "id": 1, "DueDateDetails": [{ "Name": "David", "Age": 21, "CountryName": ["US", "UK"] }, { "Name": "Chris", "Age": 23, "CountryName": ["UK"] }] }

নির্দিষ্ট সাব-ডকুমেন্ট আপডেট (Chris-এর CountryName পরিবর্তন)

> db.demo462.updateOne(
    { id: 1, "DueDateDetails.Name": "Chris" },
    { $set: { "DueDateDetails.$.CountryName": "AUS" } }
)

ফলাফল:

{ "acknowledged": true, "matchedCount": 1, "modifiedCount": 1 }

আপডেট後の ডকুমেন্ট

> db.demo462.find().pretty()

আউটপুট:

{ "_id": ObjectId("..."), "id": 1, "DueDateDetails": [{ "Name": "David", "Age": 21, "CountryName": ["US", "UK"] }, { "Name": "Chris", "Age": 23, "CountryName": "AUS" }] }

ব্যাখ্যা

  • { id: 1, "DueDateDetails.Name": "Chris" }: প্যারেন্ট ডকুমেন্ট এবং অ্যারে এলিমেন্ট দুইটোই ফিল্টার করে
  • DueDateDetails.$.CountryName: $ ম্যাচ করা এলিমেন্টের (দ্বিতীয়, ইনডেক্স ১) পজিশন দিয়ে শুধু সেটি আপডেট করে
  • শুধু প্রথম ম্যাচ করা এলিমেন্ট আপডেট হয় (একাধিক ম্যাচ হলে প্রথমটিই)
  • নোট: একাধিক এলিমেন্ট আপডেট করতে হলে $[] (অল এলিমেন্টস) বা $[identifier] (ফিল্টার্ড এলিমেন্টস) ব্যবহার করুন (MongoDB 3.6+)
  1. MongoDB-এ অ্যারে এলিমেন্টস সহ নির্দিষ্ট ডকুমেন্ট ফেচ করা

  2. MongoDB-এ বাল্ক (Bulk) অপারেশন দিয়ে অ্যারে এলিমেন্ট একাধিক আপডেট করা

  3. MongoDB-তে ডকুমেন্ট এবং সাব-ডকুমেন্ট উদাহরণ ও আপডেট

  4. MongoDB-এ এমবেডেড ডকুমেন্টের অ্যারে ফিল্টার করা (৩ লেভেল)