【问题标题】:Order by value in timeseries mongodb按时间序列mongodb中的值排序
【发布时间】:2014-11-10 09:38:57
【问题描述】:

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

谢谢

【问题讨论】:

  • 嗨 可以更改您的文档结构吗?
  • 为什么不:),你有什么建议?谢谢
  • 老实说。这可能是您在 MongoDB 上可以突破的“最广泛的”主题之一。基本上是“存储时间序列数据”。这是“非常”自以为是。有“各种”不同的方法来处理你的工作方式。您可以对插入进行“预聚合”,对后台作业进行“后聚合”,或两者兼而有之。要在此处提出真正的问题,您需要提供有关您正在做什么的“细节”。我只是要在前面加上@yogesh is not the right person to answer or even try to do so based on what I've seen here。非常非常广泛。如果可以的话,把它瘦下来。
  • @NeilLunn 同样的问题发生在我身上,所以我尝试更改我的文档结构并解决了我的问题我认为这可能对这个人有帮助,所以我写在我的文档结构和聚合查询下面,我知道这是一个非常常见和最广泛的问题
  • @NeilLunn thx,我正在写更多关于我的请求的信息。

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


【解决方案1】:

您好,我也遇到了同样的问题,那次我改变了我的文档结构,如下所示 { "_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()

【讨论】:

  • @Neil Lunn 我通过创建上述文档解决了我的文档结构问题
  • 到什么时候你会意识到我不是在“侮辱”你,而只是观察到你的个人经验水平在试图为他人提供建议方面非常缺乏。这是一个免费的论坛,但当你以如此误导和错误的方式接近时,也许你不应该这样做。
  • @NeilLunn 你认为我的个人经验水平在尝试向他人提供建议方面非常缺乏 我只是告诉用户我如何解决同样的问题,我不是强迫用户实现与我实现的相同的东西
  • 这不是最终解决方案。您还必须承认,您在此处提交的“答案”比“接受”还要多,而且幅度不大。我不希望人们效仿“你的榜样”,因为这不是做到这一点的唯一方法。正如我所建议的那样,这个主题非常广泛。请理解我在这里做出贡献基本上是因为“标准”非常低。所有人都乐于推广高质量的答案。但是数量很少,而且标准仍然很低。如果你不能正确地格式化代码,那么你就不应该教书。坏块,滚动文本。
  • 嗨 NeilLunn 和 yogesh,我的请求只是试图分享一个问题并从某人那里获得有关可能解决方案的反馈。 Yogesh,感谢您分享您的经验,也感谢 NeilLunn 关注技能的重要性,即使格式(我的个人意见:D)并不代表能力。再次感谢!美好的一周
猜你喜欢
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
  • 1970-01-01
  • 2013-08-06
  • 2014-08-21
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
相关资源
最近更新 更多