mongodb在子文档数组的数组中获取不同的项目
Posted
技术标签:
【中文标题】mongodb在子文档数组的数组中获取不同的项目【英文标题】:mongodb get distinct items in array of subdocument array 【发布时间】:2020-06-26 11:10:01 【问题描述】:我有什么:
我有一组患者,每个患者都有一系列治疗子文档。
每个治疗都有一个诊断数组(都是简单的字符串)
我想要什么
我想要得到所有的病人,不接受治疗(但有一系列他们的诊断!)
我也想得到没有重复(不同)的诊断数组
数据现在的样子
[
"_id": "5e517d80da6c3746d416f918",
"firstName": "israel",
"lastName": "k",
"maritalStatus": "Single",
"createdBy": "5e4d918ba81c963ed8d51d25",
"createdAt": "2020-02-22T19:14:08.152Z",
"__v": 1,
"lastTreatment": "2022-03-08T20:29:25.779Z",
"treatments": [
"diagnoses": [
"a",
"b"
],
"_id": "5e6555a51567d032640a72f7",
"visitReason": "balba",
"treatmentNumber": 1,
"createdBy": "5e4d918ba81c963ed8d51d25",
"treatmentDate": "2022-03-08T20:29:25.779Z"
,
"diagnoses": [
"a",
"c"
],
"_id": "5e6555a51567d032640a72f7",
"visitReason": "blabla",
"treatmentNumber": 2,
"createdBy": "5e4d918ba81c963ed8d51d25",
"treatmentDate": "2022-03-08T20:29:25.779Z"
]
,
]
我想如何获取数据
[
"_id": "5e517d80da6c3746d416f918",
"firstName": "israel",
"lastName": "k",
"maritalStatus": "Single",
"createdBy": "5e4d918ba81c963ed8d51d25",
"createdAt": "2020-02-22T19:14:08.152Z",
"__v": 1,
"lastTreatment": "2022-03-08T20:29:25.779Z",
"diagnoses": ["a","b","c"]
,
]
如何使用 MongoDB 聚合框架来做到这一点?
【问题讨论】:
【参考方案1】:您可以运行$max 以获取lastTreatment
和$reduce 以及$setUnion 以获取独特的诊断:
db.collection.aggregate([
$project:
_id: 1,
firstName: 1,
lastName: 1,
maritalStatus: 1,
createdBy: 1,
createdAt: 1,
__v: 1,
lastTreatment: $max: "$treatments.treatmentDate" ,
diagnoses:
$reduce:
input: "$treatments",
initialValue: [],
in: $setUnion: [ "$$value", "$$this.diagnoses" ]
])
Mongo Playground
【讨论】:
哇真的太好了,我什至都没问过上次治疗的事以上是关于mongodb在子文档数组的数组中获取不同的项目的主要内容,如果未能解决你的问题,请参考以下文章