2014-09-05 61 views
1

我需要在mongodb集合上執行聚合。我遇到的問題是我需要在組功能中執行OR操作。MongoDB聚合 - 可能在組功能中有OR操作符?

我的文檔具有不同的鍵值,理想情況下它們應該是相同的。我被這些值卡住了,所以我不能只是規範化數據。

例如,集合有一個電子郵件領域中的三個不同的字段值:

{ 
    _id : 1, 
    name : "docType1", 
    e_mail : "[email protected]" 
} 
{ 
    _id : 2, 
    name : "docType2", 
    email : "[email protected]" 
} 
{ 
    _id : 3, 
    name : "docType3", 
    mail : "[email protected]" 
} 

是否可以進行羣組功能,通過電子郵件值的組的文件,一旦密鑰是企業郵箱,電子郵件或郵件?

也許它可能與一個項目組合,但我迄今爲止的嘗試失敗了,我想我還需要一個OR?

回答

3

是的,它可能與aggregation framework。基本上,您需要與$ifNull運營商進行測試,並使用第二個條件的嵌套形式:

db.collection.aggregate([ 
    { "$group": { 
     "_id": { "$ifNull": [ 
      "$e_mail", 
      { "$ifNull": [ 
       "$email", 
       { "$ifNull": [ 
        "$mail", 
        false 
       ]} 
      ]} 
     ]}, 
     "count": { "$sum": 1 } 
    }}, 
    { "$match": { "_id": { "$ne": false } } } 
]) 

所以$ifNull有兩個參數,第一個是要測試它回來,在那裏它的存在或不爲空場,第二個是在條件不是true的情況下返回的替代值。

+0

這符合我有的限制。我能看到的唯一問題是,如果出於某種原因,「docType2」會有一個名爲e_mail和email的字段。它會嘗試使用應該使用電子郵件字段的e_mail字段將docType2分組。我知道這個特殊的例子不是很好,但它是我所擁有的數據中的一種可能情景,並且我認爲我會突出顯示其他任何查看相同問題的人。 – Travis 2014-09-08 07:58:43