【问题标题】:Ruby - Sort MongoDB records by Timezone?Ruby - 按时区对 MongoDB 记录进行排序?
【发布时间】:2013-03-29 21:05:57
【问题描述】:

我有一个地理空间索引为location: {lat:XX.XXXX, lng:XX.XXXX} 的文档集合。但我希望它们由 TimeZone 输出。

我正在考虑将地理位置转换为时区,并有一个基于此的索引,但我也不知道该怎么做,或者无论如何使用地理空间索引是否会更容易。

【问题讨论】:

  • 解决方案取决于您需要如何订购时区。如果它只是通常的东到西(反之亦然),那么我在下面使用 UTC 偏移量的答案应该会有所帮助。如果您需要进行 DST 调整,它会变得有点复杂:您可以更新您的 TZ 集合或为每个 TZ 创建多个文档,其中包含开始/结束日期范围和相应的 UTC 偏移量。您可以先根据当前时间进行过滤,然后您将获得正确的(经 DST 调整的)TZ 顺序。

标签: ruby mongodb geolocation timezone


【解决方案1】:

Sim 提供的出色答案可让您在自己的代码中完成所有工作 - 但它确实需要一些开销。如果您只想将位置解析为时区,并且不介意调用外部服务,则可以使用Google's Time Zone API

另请参阅this related question 及其答案。

【讨论】:

  • 很抱歉,如何通过网络调用外部 API 而不是开销?处理边缘情况(例如网络问题)或处理 API 由于某种原因不可用的情况的复杂性又如何呢?
  • @Sim - 我认为这两种解决方案都是有效的,这取决于您的情况。对于某些人来说,处理空间数据是不值得的。他们可能只有有限数量的查找。也许他们可以在提交文档时解析时区,然后将其存储起来。总的来说,我确实同意您的解决方案。实际上我不久前写了an implementation of this for RavenDB。 :)
  • 当然,“开销”的定义引起了我的注意。
【解决方案2】:

MongoDB 可以使用$geoWithin 查询条件检查是否包含在GeoJSON 中描述的任意多边形中的点。您可以在GeoJSON 中创建具有位置多边形的新时区文档集合。为此,请尝试this GitHub repo。我对this related SO question 的回答也可能有用。

获得时区集合后,您可以预先计算 TZ,将其存储在您的文档中并为其编制索引以加快查询速度。您需要提出时区的排序。与 UTC 的偏移量可能是一个很好的起点。

【讨论】:

    猜你喜欢
    • 2011-04-11
    • 2016-07-18
    • 2022-01-24
    • 1970-01-01
    相关资源
    最近更新 更多