1.使用$filter过滤数组中的元素。
比如一个文档是
{
_id: 1,
items: [
{ item_id: 23, quantity: 3, price: 110 },
{ item_id: 103, quantity: 4, price: 5 },
{ item_id: 38, quantity: 1, price: 300 }
]
}
只显示items中的price大于100的元素:
db.sales.aggregate([
{
$project: {
items: {
$filter: {
input: "$items",
as: "item",
cond: { $gte: [ "$$item.price", 100 ] }
}
}
}
}
])
或者这样:
db.test.find({}, {items:{$elemMatch:{"price":{$gt:100}}}})
但是这个方法只会返回一个符合条件的元素(尽管可能会有多个符合条件的。)