$filter(聚合)
MongoDB5.0 已于 10 月2024 结束生命周期。不再支持此版本的文档。要升级5.0 部署,请参阅 MongoDB6 。0 升级程序。
定义
兼容性
可以使用 $filter
查找托管在以下环境中的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
$filter
通过以下语法实现:
{ $filter: { input: <array>, cond: <expression>, as: <string>, limit: <number expression> } }
字段 | 规范 |
---|---|
| |
| 可解析为布尔值的表达式,它可用于确定输出数组中是否应包含某一元素。该表达式使用 |
| 可选。 代表 |
|
有关表达式的更多信息,请参阅表达式。
行为
例子 | 结果 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
|
例子
集合 sales
包含以下文档:
{ _id: 0, items: [ { item_id: 43, quantity: 2, price: 10 }, { item_id: 2, quantity: 1, price: 240 } ] } { _id: 1, items: [ { item_id: 23, quantity: 3, price: 110 }, { item_id: 103, quantity: 4, price: 5 }, { item_id: 38, quantity: 1, price: 300 } ] } { _id: 2, items: [ { item_id: 4, quantity: 1, price: 23 } ] }
以下示例将筛选 items
数组,从而使其仅包含 price
大于或等于 100
的文档:
db.sales.aggregate([ { $project: { items: { $filter: { input: "$items", as: "item", cond: { $gte: [ "$$item.price", 100 ] } } } } } ])
操作结果如下:
{ "_id" : 0, "items" : [ { "item_id" : 2, "quantity" : 1, "price" : 240 } ] } { "_id" : 1, "items" : [ { "item_id" : 23, "quantity" : 3, "price" : 110 }, { "item_id" : 38, "quantity" : 1, "price" : 300 } ] } { "_id" : 2, "items" : [ ] }