簡體   English   中英

mongodb php每天計數唯一IP

[英]mongodb php count unique ips per day

我有一個類似的“問題”: MongoDB,PHP每天都吸引不重復的訪問者

我的PHP查詢:

array(
array('$match' => array('date' => array('$gte' => $dateStart, '$lte' => $dateEnd))),
array('$project' => array('day' => array('$dayOfMonth' => '$date'))),
array('$group' => array('_id' => array('day' => '$day', 'uniqueVisitors' => '$ip'), 'count' => array('$sum' => 1))),
array('$group' => array('_id' => array('day' => '$_id.day'), 'count' => array('$sum' => 1))),
array('$sort' => array('_id.day' => 1)),
);

多數民眾贊成在顯示僅1作為計數,如果我刪除第二個組數組,我得到的IP計數,但不是唯一的。 有人可以看到我的失敗嗎? :(

最好的祝福,

您要復制的代碼中有一些不必要的步驟,因此基本上您的管道應該這樣寫

    $pipeline = array(
        array( 
            '$match' => array(
                'date' => array('$gte' => $dateStart, '$lte' => $dateEnd )
            )
        ),
        array(
            '$group' => array( 
                '_id' => array(
                    'day' => array( '$dayOfMonth' => '$date' ), 
                    'uniqueVisitors' => '$ip'
                )
            )
        ),
        array(
            '$group' => array(
                '_id' => '$_id.day', 
                'count' => array('$sum' => 1)
            )
        ),
        array( '$sort' => array('_id' => 1) )
    );

第一個$group了每月每個月的實際唯一“ ip”值。 假設您在該范圍內有一個月,或者使用$dayOfYear

現在這些項目在管道文檔中是“唯一的”,您只需將分組更改為“ day”,然后通過$sum “計數”這些條目。

除了不必要的步驟外,查詢本身確實沒有錯。 您“匹配”文檔,將它們“分組”為“每天唯一IP”,然后獲得這些唯一匹配的“計數”。


由於您的主要問題似乎在於選擇日期范圍,因此這里有一個PHP代碼段來演示一些事情:

<?php

date_default_timezone_set('UTC');

$dt = new DateTime("2014-02-01", new DateTimeZone('PST'));
echo var_dump( $dt );

echo $dt->getTimestamp(), "\n";

$mongo = new MongoDate( $dt->getTimestamp() );

echo var_dump( $mongo );
echo json_encode( array( $mongo->sec ), "\n";

#echo $mongo->sec, "\n";

$new = new DateTime( date('Y-m-d', $mongo->sec ), new DateTimeZone('PST'));

echo var_dump ($new);

?>

基本上,這就是“反復執行”的邏輯。 但實際上,我是在強迫創建一個帶有特定時區的新日期。 然后,當調用MongoDate時,我們使用getTimetamp()方法,該方法返回自紀元以來的秒數作為構造函數的饋送器。 根據定義,這始終是UTC,因此您可以輕松進行轉換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM