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}}
])
我的属性模式 (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}}
])