如何将$ group和$或mongo和group记录结合起来,这些记录在一个字段或另一个字段中具有值?

时间:2017-01-29 06:01:45

标签: mongodb

我正在尝试构建用户邮件系统并需要一些帮助。我的收藏如下:

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

我想要做的是将authorIdrecipientId中包含当前用户的userId的所有邮件分组。我可以使用mongo聚合吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试以下聚合。 $group null推送所有邮件。

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

答案 1 :(得分:0)

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