অবজেক্ট অ্যারে থেকে ফিল্টার করা ডেটা বের করা
MongoDB-এ নেস্টেড অবজেক্ট অ্যারে থেকে নির্দিষ্ট শর্ত অনুযায়ী ডেটা বের করতে $unwind এবং $match ব্যবহার করা হয়।
নমুনা ডেটা তৈরি
> db.demo459.insertOne({
_id: 1,
"Information": [
{ "Name": "Chris", "_id": new ObjectId(), "details": ["HR"] },
{ "Name": "David", "_id": new ObjectId(), "details": ["Developer"] },
{ "Name": "Bob", "_id": new ObjectId(), "details": ["Account"] }
]
})
সমস্ত ডকুমেন্ট দেখানো
> db.demo459.find()
আউটপুট:
{ "_id": 1, "Information": [{ "Name": "Chris", "_id": ObjectId("..."), "details": ["HR"] }, { "Name": "David", "_id": ObjectId("..."), "details": ["Developer"] }, { "Name": "Bob", "_id": ObjectId("..."), "details": ["Account"] }] }
নির্দিষ্ট নামের ডিটেইলস বের করার কোয়েরি
> db.demo459.aggregate([
{ $unwind: "$Information" },
{ $unwind: "$Information.details" },
{ $match: { 'Information.Name': { $in: ["Chris", "Bob"] } } },
{ $group: { _id: null, detailList: { $addToSet: "$Information.details" } } }
])
ফলাফল:
{ "_id": null, "detailList": ["Account", "HR"] }
ব্যাখ্যা
- প্রথম $unwind:
Informationঅ্যারে বিচ্ছিন্ন করে প্রতিটি অবজেক্টকে আলাদা ডকুমেন্ট বানায় - দ্বিতীয় $unwind:
detailsঅ্যারে (স্ট্রিং অ্যারে) বিচ্ছিন্ন করে - $match: শুধু "Chris" এবং "Bob" নামের এন্ট্রি রাখে
- $group + $addToSet: ইউনিক ডিটেইলস মান সংগ্রহ করে (ডুপ্লিকেট সরায়)
এই প্যাটার্ন নেস্টেড অ্যারে থেকে ফিল্টার করা ডেটা একত্রিত করতে খুব কাজে লাগে।