【问题标题】:Mongo - query, Embedded document not match except dot notationMongodb - 查询,嵌入式文档除了点符号外不匹配
【发布时间】:2020-05-26 04:24:19
【问题描述】:

我很困惑。 这是一个例子:

MongoDB Enterprise > db.employee.find()

结果:

{"_id":1002,"name":"Jack","address":{"previous":"Cresent Street","current":"234,Bald Hill Street","unit":"MongoDB" } }

我试试这个:

db.employee.find({address:{previous: "Cresent Street"}})

result: nothing returns

接下来试试这个:

 db.employee.find({"address.previous": "Cresent Street"})

结果:

{"_id":1002,"name":"Jack","address":{"previous":"Cresent Street","current":"234,Bald Hill Street","unit":"MongoDB"}}

问题是这有问题吗?

我用 MongoDB shell 版本 v4.2.7 安装 cmd db.version() 4.2.6 Debian 10.4

感谢您的回复。

【问题讨论】:

  • 这就是 MQL 的工作原理。

标签: mongodb find


【解决方案1】:

当您Query on Embedded/Nested Documents 使用点分字段表示法时

{"address.previous": "Cresent Street"}

表示查找包含address 字段的文档,该字段包含previous 字段等于"Cresent Street" 的文档。

当您提供类似的子文档时

{address:{previous: "Cresent Street"}}

这意味着查找包含address 字段的文档,该字段的内容正是文档{previous: "Cresent Street"},没有其他字段。如果您在子文档中提供多个字段,则字段顺序也很重要。

这两个查询在特定情况下都很有用,请选择在您的情况下满足您需要的查询。

【讨论】:

  • 谢谢,但如果我让这个 db.employee.find({"address" : { "previous" : "Cresent Street", "current" : "234,Bald Hill Street"}}) 返回没什么。我尝试使用其他文档查找嵌入式文档过滤器并进行工作。我不知道为什么在这个文件中不起作用。可能会编码其他东西
  • 当您使用子文档类型的查询时,它必须与整个子文档完全匹配,例如{address:{"previous":"Cresent Street","current":"234,Bald Hill Street","unit":"MongoDB" }},您不能省略任何字段,否则它将不再是完全匹配。
  • 谢谢,我没有这个,。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 2018-02-18
  • 2015-02-09
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多