Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 按MongoDB中具有相等字段的文档数进行排序/分组_Node.js_Database_Mongodb_Sorting_Document - Fatal编程技术网

Node.js 按MongoDB中具有相等字段的文档数进行排序/分组

Node.js 按MongoDB中具有相等字段的文档数进行排序/分组,node.js,database,mongodb,sorting,document,Node.js,Database,Mongodb,Sorting,Document,我想要实现的是将这些文档分组 {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}, {votei

我想要实现的是将这些文档分组

{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驱动程序

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

db.yourCollection.aggregate([{
     $group: {
        _id: '$voteid',
        votes: {$sum: 1}
     }
   },
   {
     $sort: {
       _id: 1
     }
   },
   {
     $project: {
      _id: 0,
      voteid: '$_id',
      votes: 1
     }
   }
])
我们在这里要做的是首先在记录上应用
$group
操作符,并通过将
voteid
作为累加器对象分配给
\u id
并随后在
投票中存储计数值--
{$sum:1}
来查找所有出现的
voteid

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

希望这有帮助。