MongoDB:如何正确表达查询以获取两个日期之间的数据

时间:2019-02-06 13:28:37

标签: python mongodb

在这里提出了类似的问题,但没有一个完全符合我的关注。

我正在开发访客管理应用程序。因此,假设我有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个结果的查询。每当我有被排除在外的约翰。

那么有人可以帮助我正确表达此请求吗?

1 个答案:

答案 0 :(得分:1)

您用于确定哪些访客存在的逻辑不正确。您有一个从10:0013:00的观察日期范围。您有访问者日期范围,需要确定哪些与您观察到的范围重叠。为此,您的查询应找到在date_end之前进入而在date_start之后退出的访客。

Mongo.db.History.find({"$and": [
                      {"T_EN": {"$lt": date_end}},
                      {"T_EX": {"$gte": date_start}}
                     ]})