ခဏလေး ဒီလိုပဲ စဉ်းစားကြည့်
Task Manager application တစ်ခုအနေနဲ့ အသုံးအများဆုံး feature တွေက status အလိုက် filter လုပ်ခြင်း၊ task ကို complete အဖြစ် mark လုပ်ခြင်း၊ overdue task များကို ရှာဖွေခြင်း စတာတွေပါ။ ဒီအဆင့်မှာ query filter, comparison operators ($lt, $gt), update operators ($set, $currentDate) နှင့် updateOne/updateMany တို့ကို Part 1 ရဲ့ data ပေါ်မှာ တိုက်ရိုက်လက်တွေ့ကျင့်ကြည့်ပါမယ်။ Real app တစ်ခုမှာ user က filter/search/update လုပ်တဲ့အခါ backend ကနေ ဒီလို query တွေကို run လုပ်ရတာဖြစ်ပြီး ဒီ practice က production code ပုံစံနဲ့ တော်တော်နီးစပ်ပါတယ်။ Query နဲ့ update logic ကို မှန်ကန်စွာ ရေးနိုင်ရင် Part 3 ရဲ့ aggregation report တွေအတွက်လည်း အခြေခံကောင်းတစ်ခု ရရှိမှာပါ။
လက်တွေ့ ဆောက်ကြည့်မယ်
ပထမဆုံး status: "pending" ဖြစ်ပြီး priority: "high" ဖြစ်တဲ့ task များကို find() နဲ့ query filter ချကြည့်ပါ။ ပြီးရင် task တစ်ခုကို title နဲ့ ရှာပြီး updateOne() အသုံးပြု၍ status ကို "completed" ပြောင်းပါ — $set operator နဲ့အတူ $currentDate operator ကိုပါ သုံးပြီး updatedAt timestamp field တစ်ခု အလိုအလျောက်ထည့်ပါ။ နောက်ဆုံး dueDate က ယနေ့ထက်စောပြီး status: "pending" ဖြစ်နေသေးတဲ့ task အားလုံးကို updateMany() နဲ့ overdue: true flag တင်ပါ — dueDate: { $lt: new Date() } ဆိုတဲ့ comparison operator ကို filter မှာ သုံးပါ။
Code နမူနာ
// status = pending နှင့် priority = high ဖြစ်တဲ့ task များကို ရှာပါ
db.tasks.find({ status: "pending", priority: "high" })
// task တစ်ခုကို completed ပြောင်းပြီး updatedAt timestamp ထည့်ပါ
db.tasks.updateOne(
{ title: "Fix login bug" },
{
$set: { status: "completed" },
$currentDate: { updatedAt: true }
}
)
// dueDate ကျော်နေတဲ့ pending task အားလုံးကို overdue flag တင်ပါ
db.tasks.updateMany(
{ status: "pending", dueDate: { $lt: new Date() } },
{ $set: { overdue: true } }
)
// ပြောင်းလဲမှုများကို confirm လုပ်ပါ
db.tasks.find().pretty()updateOne() နှင့် updateMany() run ပြီးတိုင်း matchedCount နှင့် modifiedCount ကို ပြန်ပေးပြီး၊ ပြန် find() ကြည့်လျှင် status, updatedAt, overdue field များ ပြောင်းလဲသွားသည်ကို တွေ့ရမည်။၅ မိနစ် စမ်းကြည့်
priority: "low" ဖြစ်တဲ့ task များကို ရှာပြီး updateMany() နဲ့ priority ကို "medium" သို့ တစ်ပြိုင်နက်တည်း ပြောင်းကြည့်ပါ — matchedCount နှင့် modifiedCount ကွာခြားချက်ရှိမရှိ ၅ မိနစ်အတွင်း စစ်ဆေးကြည့်ပါ။
သတိလေးတစ်ချက်
updateMany() ကို production data ပေါ်မှာ run လုပ်ခင် filter condition ကို find() နဲ့ အရင် test run လုပ်ပြီး ဘယ် document တွေ ထိမှာလဲ သေချာစစ်ဆေးပါ — filter ကျယ်လွန်းရင် document များစွာ မလိုလားအပ်ဘဲ update ဖြစ်သွားနိုင်သည်။