【问题标题】:Mongodb time series queryMongoDB时间序列查询
【发布时间】:2017-08-01 20:07:55
【问题描述】:

我是来自关系世界的 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 中制定这个查询呢?有任何想法吗?如果我改变文档结构来解决这个问题会更容易吗?

非常感谢!

【问题讨论】:

  • 虽然使用 MongoDB Aggregation 框架可能是可行的,但它肯定不是为它设计的(尤其是关于“从一天起 3 个月”的部分)。
  • 这正是聚合框架的设计目的。 OP 的问题-您是否真的以这种 MM/DD/YYYY 格式将日期存储为字符串?我不认为您考虑过将其实际存储为 Date 或 ISODate 类型?
  • 如果治疗是在诊断的同一天完成的,是在同一日期子文档中列出,还是在单独的子文档中列出同一日期?

标签: mongodb database


【解决方案1】:

一个选项可以是:

如果这些查询的数量相当多,那么,每当您更新文档时,检查您想要的条件,然后存储一个合适的变量(比如一些 Boolean ),您就可以索引该变量。 在这种情况下,计数会很快返回。

【讨论】:

  • 感谢您的评论。我会考虑Roll up 流程的这一部分——至少在我们的产品 (YMMV) 中,我们总是将其存储为一个单独的集合,而不是在某些记录/文档中插入额外的元数据。我希望避免这种情况,因为这种“微不足道”的结果大小“跳过”似乎可以直接在数据库中实现
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
相关资源
最近更新 更多