2015-04-04 213 views
0

我想找到他/她得到的那些患者鼻子过敏然后得到了鼻癌对mongoDB有依赖条件的聚合

所以下面的数据应该返回用户杰克

只有插孔符合查询条件。

请给我一些类似的查询类似这种问题。非常感谢

的样本数据

{ 
    "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" 
}, 
+1

什么玛丽你终于通过$project操作有你的病人? – styvane 2015-04-04 08:43:44

+2

@迈克尔玛丽不会匹配,因为她被诊断患有鼻癌的日期早于鼻子变应,而不是后。 – chridam 2015-04-04 09:03:45

+1

@chridam感谢您的进一步解释 – newBike 2015-04-04 09:05:41

回答

2

尝试以下聚合管道,其上所讨论的两个症状1滤光片的文件,然后排序由datetime下降,在未来管道所产生的文件,然后可以通过分组名称并将这些有序的症状推送到数组diagnosis。然后,通过匹配第一个具有值"nose cancer"的诊断数组元素进行匹配,从而进一步筛选之前分组管道中生成的文档,因为这应该是最新的症状,然后第二个元素是"nose allerge"

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 
}