2014-12-13 55 views
0

我已經遵循這種形式的文檔:發現,在子文件數組的數組有價票證

{ 
    created_by: 'user1', 
    created_on: '2014-10-1022: 32: 12.000', 
    submitted: true, 
    submitted_on: '2014-10-1022: 32: 12.000', 
    submitted_by: user2, 
    approved: true, 
    approved_by: 'adminUser2', 
    approved_on: '2014-10-1022: 32: 12.000', 
    form_title: 'FormTitle1', 
    form_id: 12, 
    header_responses: [ 
     { 
      header_field_id: 1, sequence: 1, 
      responses: [ 
       { 
        submitted_by: 'user1', submitted_on: '2014-10-1022: 32: 12.000', 
        values: ['xxx' ] 
       } 
      ] 
     ] 
    }, 
    { 
     header_field_id: 2, 
     sequence: 2, 
     responses: [ 
      { 
       submitted_by: 'user1', submitted_on: '2014-10-1022: 32: 12.000', 
       values: ['yyy', 'zzz'] 
      }, 
      { 
       submitted_by: 'user2', submitted_on: '2014-10-1022: 32: 12.000', 
       values: ['aaa','bbb'] 
      } 
     ] 
    } 
] 
} 

所以,FormResponse■找和header_responses數組,實習生有一個數組responses,然後有一個values陣列。這是爲了讓系統維護歷史記錄,所以當我顯示一個FormResponse時,我只顯示最後一組response``values`,但我仍然記錄了保存的內容。

現在我需要實現一個過濾系統,但我不知道如何。我需要做的是返回所有具有header_field_idFormResponse s等於某個ID,並具有包含某些內容的最後一個響應值。我發現this posting,但它只處理一個級別的數組,我不知道如何處理它以處理兩個級別。我嘗試了一些東西,但它們都是荒謬和牽強的,所以我不會分享它們,因爲它們註定要失敗。

更新

期望的迴應:我想能夠搜索到的文件,其中頭部是一些_id和最後response有一定的價值。例如,FormResponse文檔的標題ID是2,該標題的最後一個響應是'xyz'。這不應該與任何具有「xyz」作爲歷史價值的匹配。

更新2

我thinkI有它接近這一點:

FormResponses.find({ 
    header_responses: { 
    $elemMatch: { 
     header_field_id: "BZ6NzfgxK4r38274d", 
     responses: { 
     $elemMatch: { 
      values: "9999" 
     } 
     } 
    } 
    } 
}).fetch(); 

但這匹配其中任何一個值,爲 「9999」,而不是最後一個。

+0

什麼是所期望的輸出? – styvane 2014-12-13 20:38:03

+0

我添加了更多細節。這裏的關鍵是我只想匹配響應數組中的LAST子文檔。 – CodeChimp 2014-12-14 12:04:05

回答

1

示例header_field_id = 2同時把被響應值= ZZZ

db.FormResponse.find({ 
    header_responses:{ 
     $elemMatch:{ 
      header_field_id:2, 
      responses:{ 
       $elemMatch:{ 
        values:'zzz' 
       } 
      } 
     } 
    } 
}) 
+0

但是,這會給我只有'zzz'是最後的迴應? – CodeChimp 2014-12-14 12:00:20

+0

我不確定在一個查詢中這是可能的。 MongoDB可以存儲任意深度的嵌套數據結構,但無法高效地進行搜索。如果您的數據形成樹,森林或圖形,則實際上需要將每個節點及其邊緣存儲在單獨的文檔中。 – ToxaBes 2014-12-14 16:58:00