我有一个包含文件的集合。每个文档都有一个part
属性,其中包含一个哈希数组(文档)。这些文档可能有也可能没有_encwas
属性。
{
_id : "00001",
parts : [
{ _encwas: 1, body: "" },
{ body: "" }
]
},
{
_id : "00002",
parts : [
{ _encwas: 1, body: "" },
{ _encwas: 2, body: "" }
]
},
{
_id : "00003",
parts : [
{ body: "" },
{ body: "" }
]
}
是否有快速查找至少有一部分包含_encwas
属性的记录?
以下查询有效
db.collection.find({ "parts.0._encwas" : { $exists : true } });
但我很想找到一种用0
替换any part
的方法。例如
db.collection.find({ "parts.*._encwas" : { $exists : true } });
查询应尽可能高效(我不介意是否需要创建其他索引),因为我需要迭代超过1M条记录。
答案 0 :(得分:3)
当我尝试使用您的测试数据时,这似乎有效:
db.collection.find( { "parts._encwas": { $exists : true } } )
此外,您可以使用以下命令查找包含具有特定值的_encwas的所有文档:
db.collection.find( { "parts._encwas": 4 } )
...其中4是值......
我相信文档的相关部分在这里:Dot Notation