MongoDB 聚合 - $按逻辑或对一个字段进行分组
MongoDB aggregation - $group one field by logical or
我有一个带有布尔字段的员工集合。由于我的聚合涉及展开数组,因此我想按 ID 对文档进行分组,然后对它们的布尔字段执行逻辑或运算。
所以对于一个集合:
{
_id: "995",
matched: true
},
{
_id: "10",
matched: false
},
{
_id: "995",
matched: false
}
我想要这样的东西:
{
_id: "995",
matched: true
},
{
_id: "10",
matched: false
}
我的努力与 类似,但我只按 一个 布尔字段分组,所以当我尝试使用 $or 时,Mongo说“$or 累加器是一元运算符”
您可以尝试使用 $or: ["$matched", true]
、
有效负载:
[
{
id: "995",
matched: true
},
{
id: "10",
matched: false
},
{
id: "995",
matched: false
}
]
查询:
db.collection.aggregate([
{
$group: {
_id: {
id: "$id",
matched: {
$or: ["$matched", true]
}
},
root: {
$first: "$$ROOT"
}
}
},
{
$replaceRoot: {
newRoot: "$root"
}
}
])
我有一个带有布尔字段的员工集合。由于我的聚合涉及展开数组,因此我想按 ID 对文档进行分组,然后对它们的布尔字段执行逻辑或运算。
所以对于一个集合:
{
_id: "995",
matched: true
},
{
_id: "10",
matched: false
},
{
_id: "995",
matched: false
}
我想要这样的东西:
{
_id: "995",
matched: true
},
{
_id: "10",
matched: false
}
我的努力与
您可以尝试使用 $or: ["$matched", true]
、
有效负载:
[
{
id: "995",
matched: true
},
{
id: "10",
matched: false
},
{
id: "995",
matched: false
}
]
查询:
db.collection.aggregate([
{
$group: {
_id: {
id: "$id",
matched: {
$or: ["$matched", true]
}
},
root: {
$first: "$$ROOT"
}
}
},
{
$replaceRoot: {
newRoot: "$root"
}
}
])