我有以下聚合查询
db.orders.aggregate(
{ "$project" :
{ _id : 0, "dateDay" :
{"$concat" : [
{"$substr" : [{"$dayOfMonth" : "$timestamp"}, 0, 2]}, "-",
{"$substr" : [{"$month" : "$timestamp"}, 0, 2]}, "-",
{"$substr" : [{"$year" : "$timestamp"}, 0, 4]}
] }
}
},
{ "$group" :
{ "_id" : "$dateDay", "Count" : { "$sum" : 1 } }
},
{ $sort : { "Count : 1 } }
);
返回类似的东西:
{
"_id" : "3-9-2014",
"Count" : 81
},
{
"_id" : "14-12-2014",
"Count" : 10
},
{
"_id" : "2-9-2014",
"Count" : 98
},
{
"_id" : "1-9-2014",
"Count" : 118
},
{
"_id" : "20-8-2014",
"Count" : 79
},
{
"_id" : "8-6-2015",
"Count" : 128
}
],
"ok" : 1
}
如何按日-月-年的顺序对结果进行排序?
{ $sort : { "Count : 1 } } - 给我按计数排序,但我喜欢像 MySQL 查询这样的东西:
mysql> SELECT DATE(stamp), DAYNAME(stamp), COUNT(*) FROM user_orders WHERE DATE(stamp) >= DATE('2015-05-29') AND DATE(stamp) <= DATE('2015-06-19') GROUP BY DATE(stamp);
+-------------+----------------+----------+
| DATE(stamp) | DAYNAME(stamp) | COUNT(*) |
+-------------+----------------+----------+
| 2015-05-29 | Friday | 63 |
| 2015-05-30 | Saturday | 9 |
| 2015-05-31 | Sunday | 11 |
| 2015-06-01 | Monday | 94 |
| 2015-06-02 | Tuesday | 92 |
| 2015-06-03 | Wednesday | 109 |
| 2015-06-04 | Thursday | 89 |
| 2015-06-05 | Friday | 68 |
| 2015-06-06 | Saturday | 9 |
| 2015-06-07 | Sunday | 11 |
| 2015-06-08 | Monday | 125 |
| 2015-06-09 | Tuesday | 101 |
| 2015-06-10 | Wednesday | 97 |
| 2015-06-11 | Thursday | 110 |
| 2015-06-12 | Friday | 85 |
| 2015-06-13 | Saturday | 13 |
| 2015-06-14 | Sunday | 6 |
| 2015-06-15 | Monday | 113 |
| 2015-06-16 | Tuesday | 109 |
| 2015-06-17 | Wednesday | 125 |
| 2015-06-18 | Thursday | 77 |
| 2015-06-19 | Friday | 81 |
+-------------+----------------+----------+
22 rows in set (0.05 sec)
非常感谢任何建议
最佳答案
不是将第一个管道阶段作为 $project
运算符步骤,您可以将 $group
将日期聚合运算符作为组键表达式的管道步骤。以下 $sort
运算符管道将按照日-月-年的顺序对这些键进行排序,如本例所示:
db.orders.aggregate([
{
"$group": {
"_id": {
"day": { "$dayOfMonth" : "$timestamp" },
"month": { "$month" : "$timestamp" },
"year": { "$year" : "$timestamp" }
},
"Count": { "$sum" : 1 }
}
},
{
"$sort": {
"_id.year": 1,
"_id.month": 1,
"_id.day": 1
}
},
{
"$project": {
"_id": 0,
"dateDay": {
"$concat": [
{"$substr" : [ "$_id.day", 0, 2]}, "-",
{"$substr" : [ "$_id.month", 0, 2]}, "-",
{"$substr" : [ "$_id.year", 0, 4]}
]
},
"Count": 1
}
}/*,
{ $sort : { "Count : 1 } }
*/
]);
关于mongodb 聚合查询排序结果并显示日期名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31103624/