2013-04-30 262 views
1

我是來自關係世界的MongoDB的新手。任何幫助將不勝感激。我的病人具有以下屬性列表:Mongodb時間序列查詢

{"id": 101, 
    "demographics": {"sex": "male","dob": "1/1/1984"}, 
    "hospital_visits": [ 
     { "date": "1/1/2012", 
      "diagnosis": ["diabetes","fractured hip"] 
     }, 
     { "date": "3/1/2012", 
      "treatment": ["hip replacement"], 
      "outcome": "normal discharge" 
     }, 
     { "date": "5/1/2012", 
      "diagnosis": ["hip infection"], 
      "outcome": "inpatient admission" 
     } 
     ] 
    }, 
    {"id": 102, 
    "hospital_visits": [ 
     { "date": "1/1/2013", 
      "diagnosis": ["fractured hip"] 
     }, 
     { "date": "3/1/2013", 
      "treatment": ["hip replacement"], 
      "outcome": "normal discharge" 
     } 
    ] 
    } 

現在,如果我想了解的患者,在某些時候有一個「髖骨骨折」的診斷(數量在醫院探訪的一個),在隨後的日期(不在同一醫院就診)進行了「髖關節置換」治療,並且在「髖關節置換」治療日起3個月內有「住院入院」的結果,我如何框架我的MongoDB查詢?按照這個邏輯,在給定的示例數據中,顯然患者101是一個命中,而患者102不是,因此計數是1.但是,我該如何在MongoDB中制定此查詢?有任何想法嗎?如果我改變文檔結構來解決這個問題,會更容易嗎?

非常感謝!

+0

儘管可能使用MongoDB Aggregation框架,但它當然不是專爲它設計的(特別是關於「從一天開始的3個月」的部分)。 – WiredPrairie 2013-05-01 00:10:36

+0

這正是聚合框架的設計目的。 OP的問題 - 你真的將日期存儲爲這種MM/DD/YYYY格式的字符串嗎?我不認爲你考慮將它實際存儲爲日期或ISODate類型? – 2013-05-06 07:38:21

+0

如果治療是在診斷的同一天完成的,它會在同一日期的子文檔中列出,還是將它作爲單獨的子文檔列出,但列出了相同的日期? – 2013-05-06 07:52:37

回答

0

一個選項可以是:

如果這些查詢是在數量相當,那麼,當你更新所需的條件文檔檢查,然後存儲合適的變量(比如一些布爾)和你可以索引該變量。 在這種情況下,計數將返回非常快。