按时间序列mongodb按值排序

时间:2014-11-10 09:38:58

标签: mongodb mongodb-query mongodb-.net-driver aggregation-framework

我有一个像这样的时间序列集合(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
} 

由于

1 个答案:

答案 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()