我正在使用 MongoDB 4.2,并且我正在寻找一种方法来从子数组中删除所有元素,如果它不匹配使用与更改流兼容的聚合阶段的特定条件。兼容的阶段是:
- $addFields
- $匹配
- $项目
- $replaceRoot
- $replaceWith
- $编辑
- $set
- $未设置
例如,假设我们有一个集合 users,其中包含以下格式的文档:
{ "name" : "John Doe",
"access": [
{ "level" : "Gold", "rating" : 3.2 },
{ "level" : "Silver", "rating" : 2.1 },
{ "level" : "Gold", "rating" : 4.2 }
]
}
我想使用兼容的聚合阶段的一个或组合来删除“访问”数组中与过滤器不匹配的元素,例如{ $elemMatch : { "level" : "Gold" } }
. 我希望生成的文档如下所示:
{ "name" : "John Doe",
"access": [
{ "level" : "Gold", "rating" : 3.2 },
{ "level" : "Gold", "rating" : 4.2 }
]
}
是否可以在 MongoDB 中执行此操作?