2015-02-10 25 views
0

如果有這樣的數據:的MongoDB:匯聚 - 組狀態如果不爲空

{ 
user: "max", 
uploaded: <timestamp>, 
updated: <timestamp> 
} 
{ 
user: "tim", 
uploaded: <timestamp> 
} 

自從用戶可以有不同的項目。現在我用$匹配+ $組MongoDB的聚合框架是這樣的:

aggregate([ 
{ $match: {"username": "foouser"}}, 
{ $group: { 
    ...other items.. 
    "last_active": max(updated) OR IF EMPTY max(uploaded) 
} 
]); 

我想成立「last_active」,以更新的最大時間戳所以得到的最後一個活動的用戶在他的所有項目。但不是每個項目都有更新屬性。也許有在用戶的任何元素的更新屬性。所以如果max(更新)爲空,他應該選擇max(上傳)。

任何人都可以幫助我與這種情況在一個組?

回答

1

聚合管道從版本到版本發生了很大變化,因此建議您使用最新的穩定版本的mongodb。

嘗試$ max和$ setUnion運營商結合起來,就像這樣:

db.Collection.aggregate([ 
    { $match: {"username": "foouser"}}, 
    { $group: { 
    ...other items.. 
    "last_active": { $max: { $setUnion: [ "$updated", "$uploaded" ] } } 
    } 
]); 

或者$ IFNULL和$最大:

db.Collection.aggregate([ 
    { $match: {"username": "foouser"}}, 
    { $group: { 
    ...other items.. 
    "last_active": { $max: { $ifNull: [ "$updated", "$uploaded" ] } } 
    } 
]); 
+0

謝謝!我的mongo-db版本不支持$ setUnion,但它與$ ifNull一起工作良好! – mdunisch 2015-02-11 10:16:44