我有以下文档结构:
{
..
"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}
}
])
不起作用?
答案 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}
}
])