MongoDB按字段分组,对其进行计数并对其进行排序

时间:2017-06-28 12:10:34

标签: mongodb

我有以下文档结构:

{
    ..
    "mainsubject" : {
        "code": 2768,
        "name": "Abc"
    }
}

现在我需要一个所有mainsubject.code的列表以及它们的使用频率。

在SQL中我会做这样的事情:

SELECT mainsubject_code, COUNT(*) AS 'count'
FROM products
GROUP BY mainsubject_code
ORDER BY count

我已经能够将它分组并计算:

db.products.aggregate([
    {"$group" : {_id:"$mainsubject.code", count:{$sum:1}}}
]);

但是如何排序?

db.coll.aggregate([
  {
     $group: { 
        _id: "$mainsubject.code", 
        countA: { $sum: 1}
     }
  },
  {
    $sort:{$mainsubject.code:1}
  }
])

不起作用?

2 个答案:

答案 0 :(得分:1)

您必须按_id字段排序,该字段是汇总管道的$group阶段产生的字段的名称。因此,请以这种方式修改您的查询:

db.coll.aggregate([
  {
     $group: { 
        _id: "$mainsubject.code", 
        countA: { $sum: 1}
     }
  },
  {
     $sort:{_id:1}
  }
])

通过这种方式,您可以按_id升序排序。您的SQL等效查询实际上是按count排序,为实现此目的,您可以将$sort阶段更改为:

$sort:{"countA":1}

答案 1 :(得分:1)

在查看你的sql查询时,看起来你想要按计数排序。所以在mongo查询中你也应该提到countA作为排序字段。

db.coll.aggregate([
  {
     $group: { 
        _id: "$mainsubject.code", 
        countA: { $sum: 1}
     }
  },
  {
    $sort:{'countA':1}
  }
])