我正在尝试构建一个用户消息传递系统,需要一些帮助。我的收藏看起来像这样:
{
authorId: String,
recipientId: String,
message: String
}
我想做的是获取所有在authorId
或recipientId
中具有当前用户 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'}
}
}
])