درصورتی که قصد داشته باشیم document هایی از یک collection خاص را براساس شرطی بر روی یکی از فیلد های از نوع آرایه ای آنها پیدا کنیم میتونیم از عبارت $elemMatch بصورت زیر استفاده کنیم:
مثال اول:
فرض میکنیم collection ما شامل موارد زیر باشد:
{ _id: 1, results: [ 82, 85, 88 ] }
{ _id: 2, results: [ 75, 88, 89 ] }
در این صورت برای پیدا کردن document هایی که قیلد result آنها دارای عدد ۸۸ است بصورت زیر عمل میکنیم:
db.collection.find({
results: { $elemMatch: 88 }
})
همچنین میتوان از شرط های پیچیده تری استفاده نمود:
db.collection.find({
results: {
$elemMatch: { $gte: 80, $lt: 85 }
}
})
مثال دوم (آیتم های آرایه از نوع آبجکت):
فرض میکنیم collection ما شامل موارد زیر باشد:
{ _id: 1, results: [ { product: "abc", score: 10 }, { product: "xyz", score: 5 } ] }
{ _id: 2, results: [ { product: "abc", score: 8 }, { product: "xyz", score: 7 } ] }
{ _id: 3, results: [ { product: "abc", score: 7 }, { product: "xyz", score: 8 } ] }
برای یافتن مواردی که در آنها product ی با مقدار score بزرگتر مساوی 8 باشد بصورت زیر عمل میکنیم:
db.collection.find({
results: {
$elemMatch: {
product: "xyz",
score: { $gte: 8 }
}
}
})