我始终确信这些查询是等效的:
{ 'since.date': { '$lte': ISODate('2018-07-11T09:00:00.000Z') } }
,
{ 'since': { 'date': { '$lte': ISODate('2018-07-11T09:00:00.000Z') } } }
但是,只有第一个返回我正在寻找的对象 - 第二个没有提取记录。
这里有什么问题?
答案 0 :(得分:1)
对嵌套对象执行$lte
查询的唯一正确方法是使用点表示法(docs here)
您的第二个查询只是检查文档是否具有指定的结构,因此它将仅返回以下文档:
{ "since" : { "date" : { "$lte" : ISODate("2018-07-11T09:00:00Z") } } }
但它不会返回如下文件:
{ "since" : { "date" : ISODate("2018-07-11T09:00:00Z") } }
{ "since" : { "date" : { "a" : 3, "$lte" : ISODate("2018-07-11T09:00:00Z") } } }
这里没有日期比较,只是比较整个文档结构。你永远不应该使用这种语法。