$filter এবং $indexOfBytes ব্যবহার করে কেস-ইনসেনসিটিভ স্ট্রিং সার্চ
MongoDB Aggregation-এ নেস্টেড অ্যারেতে থেকে নির্দিষ্ট শব্দ ধারণকারী এলিমেন্টগুলো ফিল্টার করতে $addFields, $filter, $indexOfBytes, $toUpper ব্যবহার করা হয়।
নমুনা সংগ্রহ তৈরি
> db.demo383.insertOne(
{
"ServerName":"Jboss",
"ServerLogs": [
{ "status":"Working" },
{ "status":"Stop" },
{ "status":"Worked" }
]
}
);
{ "acknowledged" : true, "insertedId" : ObjectId("5e5b635422064be7ab44e7f1") }
ডকুমেন্ট দেখানো
> db.demo383.find().pretty();
আউটপুট:
"work" শব্দ ধারণকারী লগ ফিল্টার (অগ্রেশন)
> db.demo383.aggregate([ { "$addFields": { "ServerLogs": { "$filter": { "input": "$ServerLogs", "cond": { "$ne": [ { "$indexOfBytes": [ { "$toUpper": "$$this.status" }, { "$toUpper": "work" } ]}, -1 ] } } } }} ])ফলাফল (Working এবং Worked রাখা, Stop বাদ):
ব্যাখ্যা: $toUpper দিয়ে কেস-ইনসেনসিটিভ করা হয়েছে। $indexOfBytes "work" খুঁজে পেলে পজিশন (>=0) ফেরত দেয়, না পেলে -1। $ne: -1 দিয়ে শুধু মিলে যাওয়া রাখা হয়েছে। MongoDB 4.2+ এ $regexMatch সহজতর।