mongodb 如何按两个值相同的字段分组并计数

ubby3x7f  于 2023-11-17  发布在  Go
关注(0)|答案(1)|浏览(139)

我有一个名为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
        }
    }
]);

vsnjm48y

vsnjm48y1#

如果我理解正确的话,这里有一种方法你可以 *“获取用户是导师或所有者或两者兼而有之的玩家的用户数量"。

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上试试。

相关问题