MongoDB में $elemMatch का उपयोग करके ऐरे एलिमेंट्स फ़िल्टर करना
$elemMatch ऑपरेटर उन दस्तावेज़ों से मेल खाता है जिनमें एक ऐरे फ़ील्ड होता है जिसमें कम से कम एक एलिमेंट सभी निर्दिष्ट क्वेरी मानदंडों से मेल खाता है।
सैंपल डेटा बनाना
> db.demo239.insertOne({
"Name" : "Chris",
"details" : [
{ "DueDate" : new ISODate("2019-01-21"), "ProductPrice" : 1270 },
{ "DueDate" : new ISODate("2020-02-12"), "ProductPrice" : 2000 }
]
});
> db.demo239.insertOne({
"Name" : "David",
"details" : [
{ "DueDate" : new ISODate("2018-11-11"), "ProductPrice" : 1450 },
{ "DueDate" : new ISODate("2020-02-12") } // ProductPrice गायब है
]
});
सभी दस्तावेज़ देखना
> db.demo239.find();
आउटपुट:
{ "_id" : ObjectId("5e441c6bf4cebbeaebec5157"), "Name" : "Chris", "details" : [
{ "DueDate" : ISODate("2019-01-21T00:00:00Z"), "ProductPrice" : 1270 },
{ "DueDate" : ISODate("2020-02-12T00:00:00Z"), "ProductPrice" : 2000 }
] }
{ "_id" : ObjectId("5e441c6cf4cebbeaebec5158"), "Name" : "David", "details" : [
{ "DueDate" : ISODate("2018-11-11T00:00:00Z"), "ProductPrice" : 1450 },
{ "DueDate" : ISODate("2020-02-12T00:00:00Z") } // ProductPrice फ़ील्ड अनुपस्थित
] }
क्वेरी: ProductPrice फ़ील्ड न रखने वाले एलिमेंट्स वाले दस्तावेज़ खोजें
> db.demo239.find({
"details": {
"$elemMatch": {
"DueDate": { "$exists": true },
"ProductPrice": { "$exists": false }
}
}
})
आउटपुट (केवल David का दस्तावेज़ जिसमें एक एलिमेंट ProductPrice के बिना है):
{ "_id" : ObjectId("5e441c6cf4cebbeaebec5158"), "Name" : "David", "details" : [
{ "DueDate" : ISODate("2018-11-11T00:00:00Z"), "ProductPrice" : 1450 },
{ "DueDate" : ISODate("2020-02-12T00:00:00Z") }
] }
$elemMatch क्यों आवश्यक है?
$elemMatch के बिना, क्वेरी { "details.DueDate": { $exists: true }, "details.ProductPrice": { $exists: false } } अलग-अलग ऐरे एलिमेंट्स से शर्तों को पूरा कर सकती है (एक एलिमेंट में DueDate हो और दूसरे में ProductPrice न हो)। $elemMatch सुनिश्चित करता है कि एक ही एलिमेंट दोनों शर्तों को पूरा करे।
अन्य उपयोगी पैटर्न
{ $elemMatch: { field: { $exists: false } } }- गायब फ़ील्ड वाले एलिमेंट्स{ $elemMatch: { field: null } }- null मान वाले एलिमेंट्स{ $elemMatch: { field: { $gt: 100 } } }- शर्त पूरी करने वाले एलिमेंट्स