首页 > 解决方案 > MongoDB:用点和作为对象查询嵌套字段 - 区别?

问题描述

我一直坚信这些查询是等价的:

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

,

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

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

这里有什么问题?

标签: mongodb

解决方案


$lte对嵌套对象执行查询的唯一正确方法是使用点表示法(此处的文档)

您的第二个查询只是检查文档是否具有指定的结构,因此它将仅返回以下文档:

{ "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") } } }

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


推荐阅读