我有一个名为players的集合,下面是示例文档。现在我想获取用户是导师或所有者或两者的玩家数量。帮助我建立 mongodb 聚合管道。 (这里的用户指的是所有者或导师)
{
"_id": ObjectId("32521df3f4948bd2f54223"),
"firstName": "Olivia",
"lastName": "Moore",
"email": "[email protected]",
"owner_id": ObjectId("32521df3f4948bd2f54988"),
"mentor_id": ObjectId("32521df3f4948bd2f12343")
},
`
我尝试了下面的聚合。但用户明智的计数不准确。
db.players.aggregate([
{
$group: {
_id: { $ifNull: ["$owner_id", "$mentor_id"] },
playerCount: { $sum: 1 }
}
},
{
$project: {
user_id: "$_id",
playerCount: 1,
_id: 0
}
}
]);
如果我理解正确,这里有一种方法,您可以“获取用户是导师或所有者或两者的玩家数量。”
db.players.aggregate([
{
"$project": {
"_id": 0,
"ownersMentors": {
"$setUnion": [["$owner_id"], ["$mentor_id"]]
}
}
},
{"$unwind": "$ownersMentors"},
{
"$group": {
"_id": "$ownersMentors",
"playerCount": {"$sum": 1}
}
},
{
"$project": {
"_id": 0,
"user_id": "$_id",
"playerCount": 1
}
}
])
在 mongoplayground.net 上尝试一下。