【问题标题】:NoSQL select timeRanges that cover a given timeRangeNoSQL 选择覆盖给定时间范围的时间范围
【发布时间】:2015-12-21 04:36:41
【问题描述】:

我使用 Google App Engine 的数据存储区作为我的数据库。我有一群用户,让我们称他们为提供者,他们已经给出了一周可用的时间范围。比如下午 3-4 点。下午 4:30-7:30然后,另一个用户过来说我想看看谁在下午 5 点到 6 点有空。在这一天。如何获取表示他们在下午 5 点到 6 点有空的用户列表?对数据进行建模并获得此结果的最佳方法是什么?

【问题讨论】:

  • 没有真正的方法来选择给定的范围。如果您正在使用 30 分钟的时隙,请考虑使用位图或重复属性来存储所有 30 分钟的可用时隙,并将范围查询转换为 or 查询。

标签: sql database google-app-engine google-cloud-datastore nosql


【解决方案1】:

最好知道您使用什么语言。 我假设您使用 Java 和 Objectify。下面的代码省略了一些细节。本质上,您需要 index fromDate 和 toDate 并根据用户输入的参数过滤提供者。

public class Provider {

    ...
    @index Date availableFrom;
    @index Date availableTo; 
    ...

}

public class ProviderService {

    @ApiMethod(name = "getByRange")
    public List<Provider> getByRange( @Named("availableFrom") String   
                    availableFrom, @Named("availableTo") String availableTo{

        List<Provider> providers=   
            ofy().load().type(Provider.class).filter("availableFrom >=",  
              availableFrom).filter("availableTo <=", availableTo).list();
        return providers;
}

Objectify queries

Filter by date example

Multiple filters example

【讨论】:

    【解决方案2】:

    蒂姆霍夫曼的评论是正确答案。使用时间增量并为每个增量存储变量。如果您只有一个时间范围,都灵是正确的,但如果有多个时间范围,问题就会变得非常不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-03
      • 2012-04-12
      • 1970-01-01
      相关资源
      最近更新 更多