MongoDB में सरणी तत्वों पर रेंज क्वेरी: $elemMatch
जब आपको सरणी के एक ही तत्व पर एकाधिक शर्तें लागू करनी हों (उदाहरण: Price > 600 और Price < 900), तो $elemMatch का उपयोग करें। इसके बिना, शर्तें सरणी के अलग-अलग तत्वों द्वारा पूरी की जा सकती हैं।
नमूना डेटा
> db.demo341.insertOne({
"Name": "Chris",
"productDetails": [
{"ProductPrice": {"Price": 800}},
{"ProductPrice": {"Price": 400}},
{"ProductPrice": {"Price": 300}}
]
});
{ "acknowledged": true, "insertedId": ObjectId("5e53ed5cf8647eb59e5620a7") }
> db.demo341.insertOne({
"Name": "Chris",
"productDetails": [
{"ProductPrice": {"Price": 1000}},
{"ProductPrice": {"Price": 1200}},
{"ProductPrice": {"Price": 1300}}
]
});
{ "acknowledged": true, "insertedId": ObjectId("5e53edc1f8647eb59e5620a8") }
क्वेरी: Price 600 और 900 के बीच (एक ही तत्व में)
> db.demo341.aggregate([
{
$match: {
"productDetails": {
$elemMatch: {
"ProductPrice.Price": {$gt: 600, $lt: 900}
}
}
}
}
]).pretty();
परिणाम
{ "_id": ObjectId("5e53ed5cf8647eb59e5620a7"), "Name": "Chris", "productDetails": [ {"ProductPrice": {"Price": 800}}, ... ] }
पहला दस्तावेज़ वापस किया गया क्योंकि इसमें एक तत्व है (Price: 800) जो दोनों शर्तें पूरी करता है। दूसरा दस्तावेज़ बाहर हो गया क्योंकि इसका कोई भी तत्व 600-900 रेंज में नहीं है। $elemMatch के बिना, {$gt: 600, $lt: 900} अलग-अलग तत्वों द्वारा संतुष्ट हो सकता था (गलत परिणाम)।