首页 > 解决方案 > 直观相似的查询会导致不同的结果

问题描述

sample_training数据库、companies集合中,有如下数据:

在此处输入图像描述

练习:sample_training.companies集合中有多少家公司在“西雅图”市设有办事处?


我想到的查询是使用点表示法,如下所示:

db.companies.find({ "offices.0.city": "Seattle" }).count()

这返回110

但是,该站点将以下查询作为正确的查询

db.companies.find({ "offices": { "$elemMatch": { "city": "Seattle" } } }).count()

这返回117


我检查了我的查询似乎也可以正常工作,但我不知道为什么它们的结果不同。

标签: mongodb

解决方案


不同之处在于您查看数组中的第一个元素(索引 0)。您正在指定要查看的索引。

意思是,如果我们有以下数据库:

[
  {
    "offices": [
      {
        "city": "Dallas"
      },
      {
        "city": "Jacksonville"
      }
    ]
  }
]

使用以下查询:

db.collection.find({
  "offices.0.city": "Jacksonville"
})

它什么也不会返回。

然而,如果我们使用此查询,则元素不必是第一个索引。

db.collection.find({
  "offices": {
    "$elemMatch": {
      "city": "Jacksonville"
    }
  }
})

现场演示:

工作 - https://mongoplayground.net/p/wnX-arcooa7

不工作 - https://mongoplayground.net/p/zFWV00TzZjj


推荐阅读