我有一个像这样的时间序列集合(mongodb文档样本)
_id: "20101010/site-1/apache_pb.gif",
metadata: {
date: ISODate("2000-10-10T00:00:00Z"),
site: "site-1",
page: "/apache_pb.gif" },
daily: 5468426,
hourly: {
"0": 227850,
"1": 210231,
"2" : 12344,
"23": 20457 },
minute: {
"0": 3612,
"1": 3241,
...
"1439": 2819 }
使用聚合框架对每小时值进行排序的最佳解决方案是什么?所以例如我想按小时从低到高订购,以便得到类似的东西:
{
"2": 12344,
"23" : 20457,
"1" : 21031,
"0" : 227850
}
由于
答案 0 :(得分:2)
嗨,同样的问题发生在我身上,那时我改变了我的文档结构,如下所示
{
"_id" : "20101010/site-1/apache_pb.gif",
"metadata" : {
"date" : ISODate("2000-10-10T00:00:00Z"),
"site" : "site-1",
"page" : "/apache_pb.gif"
},
"daily" : 5468426,
"hourly" : [
{
"hour" : 0,
"value" : 227850
},
{
"hour" : 1,
"value" : 210231
},
{
"hour" : 2,
"value" : 12344
},
{
"hour" : 23,
"value" : 20457
}
],
"minute" : [
{
"min" : 0,
"value" : 3612
},
{
"min" : 1,
"value" : 3241
},
{
"min" : 1439,
"value" : 2819
}
]
}
在您的情况下,您希望根据从低到高的值首先对每小时数据进行排序,以便我编写以下聚合查询,这可能会解决您的问题
db.collectionName.aggregate(
{"$unwind":"$hourly"},
{"$project":{"hour":"$hourly.hour","value":"$hourly.value"}},
{"$sort":{"hour":-1}},
{"$group":{"_id":0,"hourlyData":
{"$push": {"hour":"$hour","value":"$value"}}}}).pretty()