首页 > 解决方案 > 如何代表创建的结果计数角色?

问题描述

[
  {
    "_id": '1',
    "role":'admin',
    "created":"0",
  },
   {
    "_id": '2',
    "role":'vendor',
    "created":"1",
  },
   {
    "_id": '3',
    "role":'cus',
    "created":"1",
  },
  {
    "_id": '4',
    "role":'cus',
    "created":"1",
  },
  {
    "_id": '5',
    "role":'admin1',
    "created":"1",
  },
  {
    "_id": '6',
    "role":'support',
    "created":"5",
  },
  {
    "_id": '7',
    "role":'support',
    "created":"5",
  },
]

想要这种类型的结果 在此先感谢

[
  {
    _id: 1,
    created: "admin",
    counts: [
      {
        role: "vendor",
        count: 1
      },
      {
        role: "cus",
        count: 2
      }
    ]
  },
  {
    _id: 5,
    created: "admin1",
    counts: [
      {
        role: "support",
        count: 2
      }
    ]
  }
]

标签: arraysnode.jsmongodbmongoose

解决方案


您可以按使用此查询创建的角色和计数进行分组。

db.<yourCollectionName>.aggregate ( { $group : { _id: "$role" , count: { $sum:1 } } })

上面的查询返回这样的输出......

{ "_id" : "cus", "count" : 2 }

聚合的另一种变体是..

db.counts.aggregate([{ $group: { _id: "$role", count: { $sum:1 }, Data: { $push: "$$ROOT" } }  }]).pretty() 

上面的查询返回这样的输出......

{
    "_id" : "cus",
    "count" : 2,
    "Data" : [
            {
                    "_id" : ObjectId("5db368e9d130deb5c19f35c8"),
                    "role" : "cus",
                    "created" : "1"
            },
            {
                    "_id" : ObjectId("5db36913d130deb5c19f35c9"),
                    "role" : "cus",
                    "created" : "1"
            }
    ]

}


推荐阅读