在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,但这只是另一个想法。
答案 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
交叉所有成员的集合将给出所有用户都忙的时间段。所以你不能分配这些插槽。
使用通用设置进行减法(差异)操作将为您提供可以自由占用的整体插槽。
希望这会有所帮助。