2015-04-04 107 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 
}