假設你有一個這樣的數據(見底部如何生成此):
{ "_id": ObjectId("508ab0e27bb16229520c9561"), "userid": 0, "url": "", "clickDate": ISODate("20120101T12:01:00Z") }
{ "_id": ObjectId("508ab0e27bb16229520c9562"), "userid": 1, "url": "", "clickDate": ISODate("20120202T12:01:00Z") }
{ "_id": ObjectId("508ab0e27bb16229520c9563"), "userid": 2, "url": "", "clickDate": ISODate("20120303T12:01:00Z") }
{ "_id": ObjectId("508ab0e27bb16229520c9564"), "userid": 3, "url": "", "clickDate": ISODate("20120404T11:01:00Z") }
{ "_id": ObjectId("508ab0e27bb16229520c9565"), "userid": 4, "url": "", "clickDate": ISODate("20120505T11:01:00Z") }
這裏是聚合函數:
db.test.aggregate({
$match: {
clickDate: { $gte: new Date(2012,8,30,12,0,0) }
}
},
{
$group: {
_id: "$userid",
clicks: { $sum: 1 }
}
}
);
確保您的$group
之前有$match
。請參閱early filtering。
結果:
{
"result": [
{ "_id": 8,
"clicks": 1
},
{ "_id": 7,
"clicks": 2
},
{ "_id": 6,
"clicks": 2
},
{ "_id": 3,
"clicks": 2
},
{ "_id": 2,
"clicks": 2
},
{ "_id": 1,
"clicks": 2
},
{ "_id": 4,
"clicks": 2
},
{ "_id": 0,
"clicks": 2
},
{ "_id": 5,
"clicks": 2
},
{ "_id": 9,
"clicks": 1
}
],
"ok": 1
}
的數據與此迴路中產生:
// d=days, m=months (for ISODate months start from 0, while days from 1)
for (var i = 0, d = 1, m = 0, id = 0; i < 100; i++, d++, m++, id++) {
if (d > 30){
d=1;
}
if (m > 10){
m=0;
}
if (id > 9){
id=0;
}
db.test.insert({userid: id, url:"", clickDate: new Date(2012,m,d,12,1,0)});
}
你的用戶名的意思是「組」作爲分組的行或「集團」,如排序,因此所有通過一個用戶標識的網址位於結果集的相同區域中? – Sammaye
我的意思是組和排序不一樣。它就像SQL命令GROUP BY一樣。 –
我認爲你的一些模式是在這裏失蹤COS:「得到一個數字,這是從[日期1]至[日期2]點擊」但你有沒有號碼,點擊字段是一個日期時間字段不是整數字段顯示點擊次數和之後你只有URL字段。你的日期字段的名稱是什麼? – Sammaye