搜索数组中的一个项目包含属性的记录

时间:2011-10-18 11:56:43

标签: mongodb database

我有一个包含文件的集合。每个文档都有一个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条记录。

1 个答案:

答案 0 :(得分:3)

当我尝试使用您的测试数据时,这似乎有效:

db.collection.find( { "parts._encwas": { $exists : true } } )

此外,您可以使用以下命令查找包含具有特定值的_encwas的所有文档:

db.collection.find( { "parts._encwas": 4 } )

...其中4是值......

我相信文档的相关部分在这里:Dot Notation