Mongo 逐对聚合
Posted
技术标签:
【中文标题】Mongo 逐对聚合【英文标题】:Mongo aggregate group by pair 【发布时间】:2021-12-21 05:36:19 【问题描述】:我有这样的收藏
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
【问题讨论】:
【参考方案1】:您可以将$group
键设置为User
和Receiver
字段的$setUnion
。
db.collection.aggregate([
$group:
_id:
"$setUnion": [
[
"$User"
],
[
"$Receiver"
]
]
,
"Messages":
$sum:
"$cond":
"if":
$not: "$IsRead"
,
"then": 1,
"else": 0
])
这是Mongo playground 供您参考。
【讨论】:
以上是关于Mongo 逐对聚合的主要内容,如果未能解决你的问题,请参考以下文章