{ $cond: [ <boolean-expression>, <true-case>, <false-case> ] }
db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 01, 2013'), "status": "success"})
db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 01, 2013'), "status": "success"})
db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 01, 2013'), "status": "error"})
db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 01, 2013'), "status": "unavailable"})
db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 02, 2013'), "status": "success"})
db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 02, 2013'), "status": "error"})
db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 02, 2013'), "status": "error"})
db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 02, 2013'), "status": "unavailable"})
db.activity.insert({"userUrl": "http://news.bbc.co.uk", "userAddress" : "1.2.3.4", "requestTime" : new Date('Jan 02, 2013'), "status": "unavailable"})
db.activity.aggregate(
{ $group: {
_id: { date: '$requestTime' },
success : {
$sum: { $cond: [ { $eq: [ 'success', '$status' ] } , 1, 0 ] }
},
error : {
$sum: { $cond: [ { $eq: [ 'error', '$status' ] } , 1, 0 ] }
},
unavailable : {
$sum: { $cond: [ { $eq: [ 'unavailable', '$status' ] } , 1, 0 ] }
}
} }
);
结果
{
"result" : [
{
"_id" : {
"date" : ISODate("2013-01-02T00:00:00Z")
},
"success" : 1,
"error" : 2,
"unavailable" : 2
},
{
"_id" : {
"date" : ISODate("2013-01-01T00:00:00Z")
},
"success" : 2,
"error" : 1,
"unavailable" : 1
}
],
"ok" : 1
}