Mongodb 如何将在一个字段或另一个字段中有值的mongo和group记录中的$group和$or组合在一起?

Mongodb 如何将在一个字段或另一个字段中有值的mongo和group记录中的$group和$or组合在一起?,mongodb,Mongodb,我正在尝试建立一个用户消息系统,需要一些帮助。我的收藏如下: { authorId: String, recipientId: String, message: String } 我要做的是将当前用户的userId包含在authorId或recipientId中的所有消息进行分组。我可以使用mongo聚合来实现这一点吗?也许您可以在投影中使用$cond进行尝试 db.message.aggregate([ { $matc

我正在尝试建立一个用户消息系统,需要一些帮助。我的收藏如下:

{
  authorId: String,
  recipientId: String,
  message: String
}

我要做的是将当前用户的userId包含在authorId或recipientId中的所有消息进行分组。我可以使用mongo聚合来实现这一点吗?

也许您可以在投影中使用$cond进行尝试

db.message.aggregate([
              {
                 $match : {$or : [{authorId:'1234'},{recipientId:'1234'}]}
              },
              {
                 $project : {
                    message : 1,
                    userId : {$cond : {if : {'$authorId':'1234'},'$authorId','$recepientId'}}
                 }
              },
              {
                 $group : {
                     _id : '$userId',
                     messages : {$push : '$message'}
                    }
              }
])

你可以试试下面的聚合$按null分组以推送所有消息

db.message.aggregate([{
    $match: {
        $or: [{
            authorId: "someid"
        }, {
            recipientId: "someid"
        }]
    }
}, {
    $group: {
        _id: null,
        messages: {
            $push: "$message"
        }
    }
}])