Sort/Group 乘以 MongoDB 中具有相同字段的文档数

Sort/Group by the number of documents with equal fields in MongoDB

我要实现的是对这些文档进行分组,

{voteid: A, userid: x}, {voteid: C, userid: x},
{voteid: A, userid: y}, {voteid: A, userid: z},
{voteid: C, userid: z}, {voteid: D, userid: z}

在具有投票数的对象中(用户在这里无关紧要)并且还根据 voteid:

对它们进行排序
{voteid: A, votes: 3},
{voteid: C, votes: 2},
{voteid: D, votes: 1}

我应该如何处理?

我正在使用 MongoDB 3.0 Node.js 驱动程序

好的,这将帮助您进行查询(计数)并将它们排序为 voteid

db.yourCollection.aggregate([{
     $group: {
        _id: '$voteid',
        votes: {$sum: 1}
     }
   },
   {
     $sort: {
       _id: 1
     }
   },
   {
     $project: {
      _id: 0,
      voteid: '$_id',
      votes: 1
     }
   }
])

我们在这里所做的是首先在记录上应用 $group 运算符,并通过将 voteid 作为累加器对象分配给 _id 并随后存储计数来找到所有出现的 voteid值 -- {$sum: 1} in votes.

然后,我们根据刚刚用votesid创建的_id排序,然后将结果投影到我们需要的形式——消除_id 并将前一组 _id 重新映射到 voteid 并允许在我们的结果中投票。

希望对您有所帮助。