覆盖给定时间范围的 NoSQL select 个时间范围

NoSQL select timeRanges that cover a given timeRange

我正在使用 Google App Engine 的数据存储作为我的数据库。我有一群用户让我们称他们为提供者,他们给出了他们在一周内可用的时间范围。喜欢 3-4 p.m。和 4:30-7:30 p.m。然后,另一位用户走过来说我想看看谁在 5-6 p.m 有空。在这一天。我如何获得表示他们有空的用户列表 5-6 p.m。对数据建模并获得此结果的最佳方法是什么?

最好知道您使用什么语言。 我假设您使用 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

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