所以我有一个集合来存储事件的开始和结束时间,我希望用户能够通过指定“过滤器”开始和结束时间来查询事件。查询应返回与过滤时间相交的任何事件。我以为我正在正确构建查询,但它没有返回我想要的结果。
示例数据(简化的 mongo 文档来理解,时间是 HHMMSS):
{ ..., "start" : "050520", "end" : "051309" } //Should match
{ ..., "start" : "051125", "end" : "051925" } //Should match
{ ..., "start" : "052049", "end" : "052420" } //Should match
{ ..., "start" : "050000", "end" : "050500" }
{ ..., "start" : "052100", "end" : "052721" }
我尝试的查询是(如果我在这里错过了括号,请原谅我,这不是问题):
find( { $or : [
{ start : { $gte : "050600", $lt : "052100" } },
{ end : { $lt : "052100", $gt : "050600" } }
] } )
仅返回三个结果之一。切换 $or 部分的顺序(在开始时间之前查询结束时间)会给我两个结果,但不是全部三个。我似乎记得在应用查询的第二部分之前,对于复合查询,mongo 会丢弃与第一部分不匹配的结果,但我认为 $or 运算符会处理这个问题。有任何想法吗?我的查询不正确,这是在 mongo 中查询的限制吗?