我想找到那些患有鼻子过敏然后患上鼻癌的患者。
因此,以下数据应该返回用户 Jack 。
只有杰克符合查询条件。
请给我一些类似的问题类似于这类问题。非常感谢
{
"id": 1,
"name": "Mary",
"symptoms": "nose allerge",
"datetime": "2011-04-02"
},
{
"id": 2,
"name": "Jack",
"symptoms": "nose allerge",
"datetime": "2011-04-02"
},
{
"id": 3,
"name": "Mark",
"symptoms": "nose allerge",
"datetime": "2010-01-02"
},
....
{
"id": 4,
"name": "Jack",
"symptoms": "nose cancer",
"datetime": "2015-04-09"
},
{
"id": 5,
"name": "Mary",
"symptoms": "nose cancer",
"datetime": "2010-09-02"
},
答案 0 :(得分:2)
尝试以下聚合管道,首先过滤有关两个症状的文档,然后按datetime
降序对下一个管道中的结果文档进行排序,然后按名称对其进行分组,并将这些有序的症状推送到数组diagnosis
。然后,通过匹配具有值"nose cancer"
的第一个诊断数组元素,进一步过滤先前分组管道中的结果文档,因为这应该是最新的症状,然后第二个元素是"nose allerge"
。您最终通过 $project
操作让您的患者:
db.collection.aggregate([
{
$match: {
symptoms: { $in: ["nose allerge", "nose cancer"] }
}
},
{
$sort: { datetime: -1 }
},/**/
{
$group: {
_id: "$name",
"diagnosis": {
"$push": "$symptoms"
}
}
},
{
$match: {
"diagnosis.0": "nose cancer",
"diagnosis.1": "nose allerge"
}
},
{
$project: {
name: "$_id",
symptoms: "$diagnosis",
_id: 0
}
}
])
结果:
{
"result" : [
{
"name" : "Jack",
"symptoms" : [
"nose cancer",
"nose allerge"
]
}
],
"ok" : 1.0000000000000000
}