Mongodb 在返回文档的子文档中查找

Mongodb 在返回文档的子文档中查找,mongodb,find,Mongodb,Find,我有一个类似这样的收藏: { "colors": ["blue","white"], "items": { "old": { "name": "test" } "current": { "name": "new_test" } } }, { "colors": ["red","green"], "items": { "old": { "name": "test2" } "current

我有一个类似这样的收藏:

{
  "colors": ["blue","white"],
  "items": {
    "old": {
      "name": "test"
    }
    "current": {
      "name": "new_test"
    }
  }
},
{
  "colors": ["red","green"],
  "items": {
    "old": {
      "name": "test2"
    }
    "current": {
      "name": "new_test2"
    }
  }
},
db.collection.find({"items": { "old": { "name": "test" } } })
可以这样使用find吗:

{
  "colors": ["blue","white"],
  "items": {
    "old": {
      "name": "test"
    }
    "current": {
      "name": "new_test"
    }
  }
},
{
  "colors": ["red","green"],
  "items": {
    "old": {
      "name": "test2"
    }
    "current": {
      "name": "new_test2"
    }
  }
},
db.collection.find({"items": { "old": { "name": "test" } } })
因此命令将返回:

{
  "colors": ["blue","white"],
  "items": {
    "old": {
      "name": "test"
    }
    "current": {
      "name": "new_test"
    }
  }
}
这可能吗?

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

db.collection.find({"items.old.name": "test" })
您使用的查询语法也可以工作,但它具有不同的语义:它将匹配整个子文档以获得相等性,而不仅仅是单个字段。例如,以下查询还将返回一个结果:

db.foo.find({"items.old": {"name" : "test"} }),
但是
db.collection.find({“items”:{“old”:{“name”:“test”}}}})
没有,因为
items
还包含一个
当前
字段

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

db.collection.find({"items.old.name": "test" })
您使用的查询语法也可以工作,但它具有不同的语义:它将匹配整个子文档以获得相等性,而不仅仅是单个字段。例如,以下查询还将返回一个结果:

db.foo.find({"items.old": {"name" : "test"} }),
但是
db.collection.find({“items”:{“old”:{“name”:“test”}}}})
没有,因为
items
还包含一个
当前
字段