2011-10-18 52 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'。我解決了你的答案。 –

相關問題