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

问题描述 投票:0回答:1

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

mongodb aggregation-framework group
1个回答
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 上尝试一下。

© www.soinside.com 2019 - 2024. All rights reserved.