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"
        }
    }
])

工作操场:https://mongoplayground.net/p/iD5nkb-_epZ