Mongo 分组分组

Mongo aggregate group by pair

我有这样的合集

User Receiver IsRead
A B false
B A false
A B false
A C false
C A false

如何按用户和接收者对其进行分组以获得这样的结果

Combined Field Messages
AB OR BA 3
AC OR CA 2

试过这个

$group: {
    _id: {$or: [{userId: "$recipientId", recipientId: "$userId"}, {userId: "$userId", recipientId: "$recipientId"}]},
    messages: {$sum: {$cond: [{$eq: ['$isRead', false]}, 1, 0]}} // count
}

您可以将 $group 键设置为 UserReceiver 字段的 $setUnion

db.collection.aggregate([
  {
    $group: {
      _id: {
        "$setUnion": [
          [
            "$User"
          ],
          [
            "$Receiver"
          ]
        ]
      },
      "Messages": {
        $sum: {
          "$cond": {
            "if": {
              $not: "$IsRead"
            },
            "then": 1,
            "else": 0
          }
        }
      }
    }
  }
])

这里是Mongo playground供您参考。