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



我正在尝试构建一个用户消息传递系统,需要一些帮助。我的收藏看起来像这样:

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

我想做的是获取所有在authorIdrecipientId中具有当前用户 userId 的消息并将它们分组。我可以使用 mongo 聚合来执行此操作吗?

你可以试试下面的聚合。 $group null推送所有消息。

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

也许你可以尝试在投影中使用$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'}
                    }
              }
])

最新更新