2011-12-07 81 views
2

我目前有一組文檔,每個文檔都包含指向該集合中其他文檔的數組。我需要查詢這個集合中的嵌套數組中包含某個屬性的文檔。我希望這可以更清楚地解釋我的請求:使用貓鼬通過嵌套文檔屬性查找

if doc.list1[0].prop = 'foo' or doc.list2[0].prop = 'foo' then select doc 

我試過使用.find()這樣,但無濟於事。

{ 
    'doc.list1': 'foo', 
    $or: [ 
     { 'doc.list2': 'foo' } 
    ] 
} 

我在正確的軌道上嗎?因爲我不認爲我是。這是我能從文檔中獲得的最好的結果。

編輯

下面是一個使用佈局托馬斯的建議,同我的實際查詢初始化。

var query = this.Word.find({ 
    $or: [ 
     { 'before.0.cleanWord': topic }, 
     { 'after.0.cleanWord': topic }, 
     { 'cleanWord': topic } 
    ] 
}); 

回答

3
{ 
    $or: [ 
    { 'doc.list1.0.prop': 'foo' } 
    { 'doc.list2.0.prop': 'foo' } 
    ] 
} 

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or

+0

優秀的,我無法測試到明天但這看起來很有希望。所以這將搜索數組中的每個嵌套文檔,而不僅僅是第一個? – Olical

+0

我有點難以理解你的數據庫正在發生什麼。它是一個Object Ids數組嗎?儘管這應該是一個有效的$或查詢,但您發佈的內容始終與doc.list1 ='foo'相匹配,並且您的$或語句是無關的,因爲它只有一個元素,它更像是一個AND。 –

+0

好的,我已經使用您對我的問題的建議追加了我當前的代碼。它仍然不會返回任何文件。仍在調試。 – Olical