gpt4 book ai didi

具有时间范围的 Mongodb 交集

转载 作者:可可西里 更新时间:2023-11-01 11:20:23 27 4
gpt4 key购买 nike

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

我们有每个支持团队的每日轮值表。每个支持团队可以每 15 分钟预订一次,持续 5-25 分钟(大约)。每个团队有2-10人。我们需要显示指定团队的下一个可用时间段。

例如:

周一的初始免费时段(团队中的每个人都有空)

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

第一张票被分配给第一个人(共 2 人),这张票被安排在 08:15,完成需要 35 分钟 .所以空闲插槽看起来完全一样:

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 开始做下一份工作 但首先,我们想专注于排除时间并根据预定的票找到合适的交叉路口。

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

最佳答案

您可以将 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

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

对通用集执行减法(diff)操作将为您提供可自由占用的总插槽。

希望这对您有所帮助。

关于具有时间范围的 Mongodb 交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37986935/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com