Mongodb与时间范围

时间:2016-06-23 09:02:56

标签: mongodb redis database

在MongodB中我们找到了交集的方法,但我们也希望实现日期范围排除。让我解释一下。

我们为每个支持团队提供每日轮流。每个支持团队每15分钟预订5-25分钟(约)。每个团队有2-10人。我们需要显示指定团队的下一个可用时间段。

例如:

星期一的初始免费插槽(团队中的每个人都可用)

08:00, 08:15, 08:30, 08:45, 09:00...

第一张门票被分配给第一人(满分为2人),此门票预定为08:15,并且需要35 minutes才能完成。所以免费插槽看起来完全一样:

08:00, 08:15, 08:30, 08:45, 09:00...
    (08:15-08:50 1/2 busy)

第二张机票到达并安排在08:30,需要一个小时才能完成。所以免费插槽应该是这样的:

08:00, 08:15,09:00...
(08:15-08:50 1st of 2 busy)
(08:30-09:30 2nd of 2 busy)

我们完全清楚,现在我们可以让08:15的票最长可用15分钟,因为第二个人将开始在08:30完成下一个工作,但首先我们会在td {border: none;} 开始工作。我希望专注于排除时间,并找到适当的交叉点,以及预定的门票。

我们也使用redis而不是MongoDB,但这只是另一个想法。

1 个答案:

答案 0 :(得分:1)

你可以在这个用例中使用redis'集:

如果时间段总是15分钟的倍数,你可以这样做:

1)拥有一个包含所有时隙的通用集。这里是15的倍数。

sadd universal 08:00 08:15 08:30 08:45 09:00 ...

2)团队中的每个成员都为他们预订的插槽设置了单独的设置。对于member1 08:15-08:50 ,你必须让他参与 09:00

sadd member_1 08:15 08:30 08:45 09:00

3)同样也适用于其他成员。 member2 08:30-09:30

sadd member_2 08:30 08:45 09:00 09:30

4)现在,对于每个成员,您可以使用

获得免费插槽
sdiff universal member_1

5)对于整体插槽免费。你必须做两个操作。

result = sinter member_1 member_2 ...
sdiff universal result

交叉所有成员的集合将给出所有用户都忙的时间段。所以你不能分配这些插槽。

使用通用设置进行减法(差异)操作将为您提供可以自由占用的整体插槽。

希望这会有所帮助。