منبع اصلی نوشتار زیر در این لینک قرار دارد

کوئری بر روی آیتم های فیلد از نوع آرایه در mongodb


درصورتی که قصد داشته باشیم 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 }
}
}
})




برچسب ها :