MongoDB में $setIsSubset और एग्रीगेशन का उपयोग करके ऐरे फ़िल्टरिंग करना
MongoDB में किसी ऐरे के एलिमेंट्स को दूसरे ऐरे के सबसेट के आधार पर फ़िल्टर करने के लिए एग्रीगेशन पाइपलाइन में $setIsSubset और $filter ऑपरेटर्स का उपयोग करें।
उदाहरण: संग्रह और दस्तावेज़ बनाना
> db.demo407.insertOne(
{
Name:"Chris",
"details" : [
{ id:100 },
{ id:110 },
{ id:130 }
]
}
);
{ "acknowledged" : true, "insertedId" : ObjectId("5e70dffe15dc524f70227677") }
दस्तावेज़ देखना
> db.demo407.find().pretty();
आउटपुट:
{ "_id" : ObjectId("5e70dffe15dc524f70227677"), "Name" : "Chris", "details" : [ { "id" : 100 }, { "id" : 110 }, { "id" : 130 } ] }
ऐरे फ़िल्टरिंग क्वेरी (id 100 और 130 वाले एलिमेंट्स रखें)
> db.demo407.aggregate([
{$match: { }},
{$project: {
"details": {
$filter: {
input: "$details",
as: "output",
cond: { $setIsSubset: [["$$output.id"], [100, 130]] }
}
}
}}
])
आउटपुट:
{ "_id" : ObjectId("5e70dffe15dc524f70227677"), "details" : [ { "id" : 100 }, { "id" : 130 } ] }
व्याख्या:
$filter- ऐरे के प्रत्येक एलिमेंट पर शर्त लागू करता हैinput: "$details"- स्रोत ऐरेas: "output"- प्रत्येक एलिमेंट के लिए वेरिएबल नाम$setIsSubset: [["$$output.id"], [100, 130]]- जांचता है कि क्या एलिमेंट का id मान [100, 130] सेट का सबसेट है$$output.id- वर्तमान एलिमेंट का id फील्ड
$setIsSubset व्यवहार:
- पहला ऐरे दूसरे ऐरे का सबसेट है तो
trueलौटाता है [[]]डबल ऐरे इसलिए क्योंकि$setIsSubsetदो सेट्स की अपेक्षा करता है- यहां प्रत्येक एलिमेंट का id एकल-मान सेट के रूप में जांचा जाता है
अन्य सेट ऑपरेटर्स: $setEquals, $setIntersection, $setDifference, $setUnion, $anyElementTrue, $allElementsTrue।