MongoDB 聚合属性模式 Pipeline/Query

MongoDB Aggregation Attribute Pattern Pipeline/Query

我的属性模式 (https://www.mongodb.com/blog/post/building-with-patterns-the-attribute-pattern) 字段如下所示:

"cmr_diag": [{
        "name": "shd?",
        "value": {
            "$numberDouble": "1"
        }
    }, {
        "name": "ischemic_hd",
        "value": {
            "$numberDouble": "1"
        }
    }, {
        "name": "non-ischemic_dcmp",
        "value": {
            "$numberDouble": "1"
        }
    }, {
        "name": "myocarditis",
        "value": {
            "$numberDouble": "0"
        }
    }, {
        "name": "hcm",
        "value": {
            "$numberDouble": "0"
        }
    }, {
        "name": "amyloidosis",
        "value": {
            "$numberDouble": "0"
        }
    }, {
        "name": "toxic_cmp",
        "value": {
            "$numberDouble": "1"
        }
      .
      .
      .

我想创建一个聚合管道,查找所有只有 ischemic_hd 的患者,而所有其他可能的疾病均为 0。但是我不确定如何创建此查询?

您可以使用 $elemMatch 来识别具有特定属性的患者。

如果要排除其他所有内容,请使用 $reduce 将所有属性的值相加,并匹配计数 = 1 的位置。

db.collection.aggregate([
   {$match: {
       cmr_diag: {
           $elemMatch: {
                  name: "ischemic_hd",
                  value: { "$numberDouble": "1" }
           }
       }
   }},
   {$addFields: {
       diagcount: {
          $reduce: {
              input: "$cmr_diag",
              initialValue: 0,
              in: {$sum: ["$$value","$$this.value.$numberDouble"]}
          }
       }
    }},
    {$match: { diagcount: 1}}
])