1

我有一个看起来像这样的集合:

{
  "colors": ["blue","white"],
  "items": {
    "old": {
      "name": "test"
    }
    "current": {
      "name": "new_test"
    }
  }
},
{
  "colors": ["red","green"],
  "items": {
    "old": {
      "name": "test2"
    }
    "current": {
      "name": "new_test2"
    }
  }
},

是否可以像这样使用find:

db.collection.find({"items": { "old": { "name": "test" } } })

所以命令会返回:

{
  "colors": ["blue","white"],
  "items": {
    "old": {
      "name": "test"
    }
    "current": {
      "name": "new_test"
    }
  }
}

这可能吗?

4

1 回答 1

4

是的,您可以使用“点符号”进入对象:

db.collection.find({"items.old.name": "test" })

您使用的查询语法也有效,但它具有不同的语义:它将匹配整个子文档以实现相等,而不仅仅是单个字段。例如,以下查询也将返回结果:

db.foo.find({"items.old": {"name" : "test"} }),

db.collection.find({"items": { "old": { "name": "test" } } })没有,因为items 包含一个current字段。

于 2013-10-26T11:28:01.657 回答