使用应用于MongoDB中变更流的聚合阶段从子阵列中移除元素?
我使用的是MongoDB 4.2,我正在寻找一种方法,如果子阵列不符合某个条件,可以使用一个与。这些措施包括:使用应用于MongoDB中变更流的聚合阶段从子阵列中移除元素?,mongodb,aggregation-framework,changestream,Mongodb,Aggregation Framework,Changestream,我使用的是MongoDB 4.2,我正在寻找一种方法,如果子阵列不符合某个条件,可以使用一个与。这些措施包括: $addFields $match $project $replaceRoot $replacetwith $redact $set 美元未结算 例如,考虑到我们有一个集合,用户,包含这种格式的文档: { "name" : "John Doe", "access": [ { "
- $addFields
- $match
- $project
- $replaceRoot
- $replacetwith
- $redact
- $set
- 美元未结算
例如,考虑到我们有一个集合,用户,包含这种格式的文档:
{ "name" : "John Doe",
"access": [
{ "level" : "Gold", "rating" : 3.2 },
{ "level" : "Silver", "rating" : 2.1 },
{ "level" : "Gold", "rating" : 4.2 }
]
}
我想使用一个或多个兼容聚合阶段来删除“access”数组中与筛选器不匹配的元素,例如{$elemMatch:{“level”:“Gold”}
。我希望生成的文档如下所示:
{ "name" : "John Doe",
"access": [
{ "level" : "Gold", "rating" : 3.2 },
{ "level" : "Gold", "rating" : 4.2 }
]
}
是否可以在MongoDB中执行此操作?您可以将
$addFields
/$set
与
如果要更新现有文档,可以使用更新管道进行更新,如下所示
db.test.updateMany({
access: { $elemMatch: { level: { $ne: "Gold" } } }, // find elements that does not match your condition
[{
$set: {
access: {
$filter: {
input: "$access",
cond: { $eq: ["$$this.level", "Gold"] } // your condition expression
}
}
}
}]
)
db.test.updateMany({
access: { $elemMatch: { level: { $ne: "Gold" } } }, // find elements that does not match your condition
[{
$set: {
access: {
$filter: {
input: "$access",
cond: { $eq: ["$$this.level", "Gold"] } // your condition expression
}
}
}
}]
)