什么';以下两个mongodb查询之间的区别是什么?

什么';以下两个mongodb查询之间的区别是什么?,mongodb,Mongodb,我运行了以下两个查询,它们返回了不同的结果 //我的查询1 >db.events.count({“startTimeUnix”:{$lt:153326880000},“startTimeUnix”:{$gte:1533182400000}) 131 //现有应用程序查询2 >db.events.count({“startTimeUnix”:{“$lt”:153326880000,$gte:1533182400000}) 0 查询2已经在批处理应用程序中使用,但它报告提取的记录较少,我从这些查询

我运行了以下两个查询,它们返回了不同的结果

//我的查询1
>db.events.count({“startTimeUnix”:{$lt:153326880000},“startTimeUnix”:{$gte:1533182400000})
131
//现有应用程序查询2
>db.events.count({“startTimeUnix”:{“$lt”:153326880000,$gte:1533182400000})
0
查询2已经在批处理应用程序中使用,但它报告提取的记录较少,我从这些查询中确认了这一点

//这些计数令人困惑
>db.events.count()
2781
>db.events.count({“startTimeUnix”:{$lt:153326880000})
361
>db.events.count({“startTimeUnix”:{$gte:1533182400000})
2780
查询2是一种重要的(正确的)构建方式,查询1在MongoDB语法方面是不正确的。分析它的方式非常简单,MongoDB接受第一个条件,然后用第二个条件覆盖它,因此它的含义与:

db.events.count({"startTimeUnix":{$gte:1533182400000}})

第一个条件会被忽略,这就是为什么您会得到更多的结果(已描述)

问题是,如果运算符在引号中,mongo不会解析运算符。 db.events.count({“startTimeUnix”:{“$lt”:153326880000,$gte:1533182400000}) 表示它查找startTimeUnix是对象且包含字段“$lt”和“$gte”的条目 如果在下一个命令中单击,则此查询开始返回1:

db.events.insert({"startTimeUnix":{"$lt":1533268800000,"$gte":1533182400000}})

使用第二个查询。您可以添加explain()来查找查询计划。第一个问题

db.events.count({"startTimeUnix":{$lt:1533268800000},"startTimeUnix":{$gte:1533182400000}})
评估结果与相同

db.events.explain().count({"startTimeUnix":{$gte:1533182400000}})
使用下面的命令查看查询计划

db.events.explain().count({"startTimeUnix":{$lt:1533268800000},"startTimeUnix":{$gte:1533182400000}})

db.events.count({“startTimeUnix”:“$lt”:153326880000}})
返回什么?@Naya我用结果更新了Q。