MongoDB:用点和对象查询嵌套字段 - 区别?

时间:2018-05-09 15:41:44

标签: mongodb

我始终确信这些查询是等效的:

{ 'since.date': { '$lte': ISODate('2018-07-11T09:00:00.000Z') } }

{ 'since': { 'date': { '$lte': ISODate('2018-07-11T09:00:00.000Z') } } }

但是,只有第一个返回我正在寻找的对象 - 第二个没有提取记录。

这里有什么问题?

1 个答案:

答案 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") } } }

这里没有日期比较,只是比较整个文档结构。你永远不应该使用这种语法。