mongodb - MongoDB:用点和作为对象查询嵌套字段 - 区别?
问题描述
我一直坚信这些查询是等价的:
{ 'since.date': { '$lte': ISODate('2018-07-11T09:00:00.000Z') } }
,
{ 'since': { 'date': { '$lte': ISODate('2018-07-11T09:00:00.000Z') } } }
但是,只有第一个返回我正在寻找的对象 - 第二个不获取任何记录。
这里有什么问题?
解决方案
$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") } } }
这里没有日期比较,它只是比较整个文档结构。你永远不应该使用这种语法。
推荐阅读
- python - Keras - 一类 CNN - 每一步都有两个输入
- python - 进入第一个纪元后,Tensorflow 抛出 ValueError()
- typescript - 通用映射以及将值与键关联
- javascript - Map 以及如何在 JS 中访问对象键?
- javascript - 正则表达式 JS
- reactjs - 编译错误 Unexpected token '<' my first app React
- python - Django 测试 - ImportError/ModuleNotFoundError
- python - MySQL auto_increment 不为空
- macos - gfortran 编译器给出分段错误
- php - AJAX 加载到另一个具有变量的 div