我正在使用 PHP 和 MongoDB 创建一些分析脚本,但我有点卡住了。我想在特定时间范围内获得每天唯一的访问者数量。
{
"_id": ObjectId("523768039b7e7a1505000000"),
"ipAddress": "127.0.0.1",
"pageId": ObjectId("522f80f59b7e7a0f2b000000"),
"uniqueVisitorId": "0445905a-4015-4b70-a8ef-b339ab7836f1",
"recordedTime": ISODate("2013-09-16T20:20:19.0Z")
}
要过滤的字段是 uniqueVisitorId 和recordedTime。
我在 PHP 中创建了一个初始化的数据库对象,它在构造对象时使我建立了一个数据库连接,然后我使用在对象构造时创建的数据库连接将 MongoDB php 函数简单地映射到公共函数。
无论如何,到目前为止,我得到了每天的访问者数量:
public function GetUniqueVisitorsDiagram() {
// MAP
$map = new MongoCode('function() {
day = new Date(Date.UTC(this.recordedTime.getFullYear(), this.recordedTime.getMonth(), this.recordedTime.getDate()));
emit({day: day, uniqueVisitorId:this.uniqueVisitorId},{count:1});
}');
// REDUCE
$reduce = new MongoCode("function(key, values) {
var count = 0;
values.forEach(function(v) {
count += v['count'];
});
return {count: count};
}");
// STATS
$stats = $this->database->Command(array(
'mapreduce' => 'statistics',
'map' => $map,
'reduce' => $reduce,
"query" => array(
"recordedTime" =>
array(
'$gte' => $this->startDate,
'$lte' => $this->endDate
)
),
"out" => array(
"inline" => 1
)
));
return $stats;
}
我将如何正确过滤这些数据以获取唯一身份访问者?或者使用聚合会更好,如果可以的话,你能帮我提供一个代码片段吗?