শর্তসাপেক্ষ টাইমস্ট্যাম্প আপডেট: upsert ও multi
MongoDB-এ শুধু যেসব ডকুমেন্টে নির্দিষ্ট ফিল্ড (যেমন DueDate) নেই, সেগুলোতে বর্তমান টাইমস্ট্যাম্প সেট করতে update() দিয়ে upsert: false, multi: true ব্যবহার করা হয়।
নমুনা ডেটা তৈরি
> db.demo479.insertOne({ "DueDate": new ISODate("2020-01-10"), "Name": "Chris" })
> db.demo479.insertOne({ "Name": "David" })
> db.demo479.insertOne({ "DueDate": new ISODate("2019-12-31"), "Name": "Bob" })
> db.demo479.insertOne({ "Name": "Carol" })
সমস্ত ডকুমেন্ট দেখানো
> db.demo479.find()
আউটপুট:
{ "_id": ObjectId("..."), "DueDate": ISODate("2020-01-10T00:00:00Z"), "Name": "Chris" }
{ "_id": ObjectId("..."), "Name": "David" }
{ "_id": ObjectId("..."), "DueDate": ISODate("2019-12-31T00:00:00Z"), "Name": "Bob" }
{ "_id": ObjectId("..."), "Name": "Carol" }
DueDate অনুপস্থিত ডকুমেন্টগুলতে বর্তমান টাইমস্ট্যাম্প যোগ
> db.demo479.update(
{ DueDate: { $exists: false } },
{ $set: { "DueDate": new Date } },
{ upsert: false, multi: true }
)
ফলাফল:
WriteResult({ "nMatched": 2, "nUpserted": 0, "nModified": 2 })
আপডেট後の ডকুমেন্ট
> db.demo479.find()
আউটপুট:
{ "_id": ObjectId("..."), "DueDate": ISODate("2020-01-10T00:00:00Z"), "Name": "Chris" }
{ "_id": ObjectId("..."), "Name": "David", "DueDate": ISODate("2020-03-30T14:52:29.656Z") }
{ "_id": ObjectId("..."), "DueDate": ISODate("2019-12-31T00:00:00Z"), "Name": "Bob" }
{ "_id": ObjectId("..."), "Name": "Carol", "DueDate": ISODate("2020-03-30T14:52:29.656Z") }
ব্যাখ্যা
{ DueDate: { $exists: false } }: শুধু যেসব ডকুমেন্টে DueDate ফিল্ড নেই তাদের মэтচ করে$set: { "DueDate": new Date }: বর্তমান সময় (ISODate) সেট করেupsert: false: নতুন ডকুমেন্ট তৈরি করবে না (ডিফল্ট)multi: true: সব মিলে যাওয়া ডকুমেন্ট আপডেট করবে (ডিফল্ট false = শুধু একটা)
⚠️ আধুনিক সিনট্যাক্স (MongoDB 3.2+)
> db.demo479.updateMany(
{ DueDate: { $exists: false } },
{ $set: { "DueDate": new Date() } }
)
updateMany() ডিফল্টেই multi: true আচরণ করে। update() ডিপ্রিকেটেড।