2013-04-30 128 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

一个选项可以是:

如果这些查询是在数量相当,那么,当你更新所需的条件文档检查,然后存储合适的变量(比如一些布尔)和你可以索引该变量。 在这种情况下,计数将返回非常快。