我有一个看起来像这样的集合:
{
"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"
}
}
}
这可能吗?
答案 0 :(得分:4)
是的,您可以使用“dot notation”进入对象:
db.collection.find({"items.old.name": "test" })
您使用的查询语法也有效,但它具有不同的语义:它将匹配整个子文档以获得相等而不仅仅是单个字段。例如,以下查询也会返回结果:
db.foo.find({"items.old": {"name" : "test"} }),
但db.collection.find({"items": { "old": { "name": "test" } } })
没有,因为items
也包含current
字段。