在这里提出了类似的问题,但没有一个完全符合我的关注。
我正在开发访客管理应用程序。因此,假设我有5位访客记录了他们的姓名,电话号码,进入时间,离开时间等信息。以一种简化的方式,我可以这样:
- T_EN =“进入时间; T_EX =”退出时间“
1. {name: "John", T_EN: 2019-01-14 08:00:00.608, T_EX: 2019-01-14 16:00:00.078}
2. {name: "Alice", T_EN: 2019-01-14 10:05:00.412, T_EX: 2019-01-14 12:15:00.065}
3. {name: "Eric", T_EN: 2019-01-14 10:45:00.315, T_EX: 2019-01-14 11:00:00.952}
4. {name: "Mark", T_EN: 2019-01-14 11:22:00.548, T_EX: 2019-01-14 13:58:00.875}
5. {name: "Bob", T_EN: 2019-01-14 14:49:00.490, T_EX: 2019-01-14 15:52:00.652}
现在,我想知道当天10:00和13:00之间有哪些访客。
我测试过的东西(但并没有达到我的期望):
date_start = datetime.datetime.strptime('2019-01-14 10:00:00', '%Y-%m-%d %H:%M:%S')
date_end = datetime.datetime.strptime('2019-01-14 13:00:00', '%Y-%m-%d %H:%M:%S')
Mongo.db.History.find({"$and": [
{"T_EN": {"$gte": date_start, "$lt": date_end}},
{"T_EX": {"$gte": date_start, "$lt": date_end}}
]})
从逻辑上讲,在此间隔内,出现了John,Alice,Eric和Mark。但是我找不到返回这4个结果的查询。每当我有被排除在外的约翰。
那么有人可以帮助我正确表达此请求吗?
答案 0 :(得分:1)
您用于确定哪些访客存在的逻辑不正确。您有一个从10:00
到13:00
的观察日期范围。您有访问者日期范围,需要确定哪些与您观察到的范围重叠。为此,您的查询应找到在date_end
之前进入而在date_start
之后退出的访客。
Mongo.db.History.find({"$and": [
{"T_EN": {"$lt": date_end}},
{"T_EX": {"$gte": date_start}}
]})