Mongo 分组分组
Mongo aggregate group by pair
我有这样的合集
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
}
您可以将 $group
键设置为 User
和 Receiver
字段的 $setUnion
。
db.collection.aggregate([
{
$group: {
_id: {
"$setUnion": [
[
"$User"
],
[
"$Receiver"
]
]
},
"Messages": {
$sum: {
"$cond": {
"if": {
$not: "$IsRead"
},
"then": 1,
"else": 0
}
}
}
}
}
])
这里是Mongo playground供您参考。
我有这样的合集
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
}
您可以将 $group
键设置为 User
和 Receiver
字段的 $setUnion
。
db.collection.aggregate([
{
$group: {
_id: {
"$setUnion": [
[
"$User"
],
[
"$Receiver"
]
]
},
"Messages": {
$sum: {
"$cond": {
"if": {
$not: "$IsRead"
},
"then": 1,
"else": 0
}
}
}
}
}
])
这里是Mongo playground供您参考。