2011-10-18 26 views
1

我有一个包含文档的集合。每个文档都有一个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 } }); 

,但我很想找到一种方法与any part更换0。例如

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

查询应尽可能高效(如果我需要创建额外的索引我不介意),因为我需要遍历超过1M记录的详细。

回答

3

这似乎工作时,我与你的测试数据尝试:

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

此外,你可以找到使用含有特定值_encwas所有文件:

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

...其中4是值...

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

+0

+1。是的,这就是多值(数组)字段应该如何工作。 – Thilo

+0

它似乎没有工作。它返回所有包含部分的记录,不管它们是否包含'_encwas'。 –

+1

好吧,我发现了这个问题。它应该是'$ exists:true'。我解决了你的答案。 –

相关问题