new MongoDB\BSON\UTCDateTime($from * 1000) ]; } if (!is_null($to)) { $filter['time'] = [ '$lte' => new MongoDB\BSON\UTCDateTime($to * 1000) ]; } } $rval = [ [ '$match' => $filter ], [ '$group' => [ '_id' => null, 'tot' => ['$sum' => '$'.$field] ] ] ]; return $rval; } public static function getNotiziaImpressions($id, $from = null, $to = null){ return self::sumFieldFilterDate( [ 'notizia' => $id ], 'views', $from, $to ); } public static function getBannerImpressions($id, $from = null, $to = null){ return self::sumFieldFilterDate( [ 'banner' => $id ], 'views', $from, $to ); } public static function getBannerClicks($id, $from = null, $to = null){ return self::sumFieldFilterDate( [ 'banner' => $id ], 'clicks', $from, $to ); } public static function getDailyVisualizationPipeline($startDate){ $rval = array( array( '$match'=>array( 'statType'=>StatisticModel::STAT_TYPE_PAGE, 'date'=>array( // '$gte'=>new MongoDate($startDate) '$gte'=>new MongoDB\BSON\UTCDateTime($startDate * 1000) ) ) ), array( '$group'=>array( "_id"=>array( 'date'=>array( "day"=>array('$dayOfMonth'=>'$date'), "month"=>array('$month'=>'$date'), "year"=>array('$year'=>'$date') ), 'user'=>'$user.id', ), "visualizzazioni"=>array( '$sum'=>1 ), "isNew"=>array( '$sum'=>array( '$cond'=>array( array('$eq'=>array('$user.isNew',true)), 1, 0 ) ) ) ) ), array( '$group'=>array( "_id"=>array( 'date'=>'$_id.date' ), "visualizzazioni"=>array( '$sum'=>'$visualizzazioni' ), "unici"=>array( '$sum'=>'$isNew' ), "visitatori"=>array( '$sum'=>1 ) ) ), array( '$sort'=>array( "_id.date.year"=>1, "_id.date.month"=>1, "_id.date.day"=>1 ) ) ); return $rval; } public static function getDailyVisualizationPipelineByStartAndEnd($startDate,$endDate){ $rval = array( array( '$project'=>array( 'tdate'=>array( '$add'=>array( '$date',60*60*1000 ) ), "statType"=>'$statType', 'user'=>'$user', ) ), array( '$match'=>array( 'statType'=>StatisticModel::STAT_TYPE_PAGE, 'tdate'=>array( // '$gte'=>new MongoDate($startDate), // '$lte'=>new MongoDate($endDate) '$gte'=>new MongoDB\BSON\UTCDateTime($startDate * 1000), '$lte'=>new MongoDB\BSON\UTCDateTime($endDate * 1000) ) ) ), array( '$group'=>array( "_id"=>array( 'date'=>array( "day"=>array('$dayOfMonth'=>'$tdate'), "month"=>array('$month'=>'$tdate'), "year"=>array('$year'=>'$tdate') ), 'user'=>'$user.id', ), "visualizzazioni"=>array( '$sum'=>1 ), "isNew"=>array( '$sum'=>array( '$cond'=>array( array('$eq'=>array('$user.isNew',true)), 1, 0 ) ) ) ) ), array( '$group'=>array( "_id"=>array( 'date'=>'$_id.date' ), "visualizzazioni"=>array( '$sum'=>'$visualizzazioni' ), "unici"=>array( '$sum'=>'$isNew' ), "visitatori"=>array( '$sum'=>1 ) ) ), array( '$sort'=>array( "_id.date.year"=>1, "_id.date.month"=>1, "_id.date.day"=>1 ) ) ); return $rval; } public static function getMonthlyVisualizationPipeline($startDate){ $rval = array( array( '$match'=>array( 'statType'=>StatisticModel::STAT_TYPE_PAGE, 'date'=>array( // '$gte'=>new MongoDate($startDate) '$gte'=>new MongoDB\BSON\UTCDateTime($startDate * 1000) ) ) ), array( '$group'=>array( "_id"=>array( 'date'=>array( "month"=>array('$month'=>'$date'), "year"=>array('$year'=>'$date') ), 'user'=>'$user.id', ), "visualizzazioni"=>array( '$sum'=>1 ), "isNew"=>array( '$sum'=>array( '$cond'=>array( array('$eq'=>array('$user.isNew',true)), 1, 0 ) ) ) ) ), array( '$group'=>array( "_id"=>array( 'date'=>'$_id.date' ), "visualizzazioni"=>array( '$sum'=>'$visualizzazioni' ), "unici"=>array( '$sum'=>'$isNew' ), "visitatori"=>array( '$sum'=>1 ) ) ), array( '$sort'=>array( "_id.date.year"=>1, "_id.date.month"=>1 ) ) ); return $rval; } /** * Il risultato di questa pipeline restituisce un oggetto con _id.banner contenente l'id del banner e visualizzazioni contenente il numero * di visualizzazioni per oggi ordinati in modo crescente per visualizzazioni * @param unknown $position * @return multitype:multitype:multitype:number multitype:multitype:unknown number multitype:MongoDate multitype:multitype:multitype:number multitype:multitype:string */ public static function getTodaysBannerVisualizationPipeline($position){ $rval = array( array( '$match'=>array( 'statType'=>StatisticModel::STAT_TYPE_BANNER_IMPRESSION, 'content.position'=>$position, // 'date'=>array( '$gte'=>new MongoDate(strtotime("today")) ) 'date'=>array( '$gte'=>new MongoDB\BSON\UTCDateTime(strtotime("today CET") * 1000) ) ) ), array( '$group'=>array( "_id"=>array( 'banner'=>'$content.banner', ), "visualizzazioni"=>array( '$sum'=>1 ) ) ), array( '$sort'=>array( "visualizzazioni"=>1 ) ) ); return $rval; } /** * Il risultato di questa pipeline restituisce un oggetto con _id.banner contenente l'id del banner e visualizzazioni contenente il numero * di visualizzazioni per oggi ordinati in modo crescente per visualizzazioni * @param unknown $position * @return multitype:multitype:multitype:number multitype:multitype:unknown number multitype:MongoDate multitype:multitype:multitype:number multitype:multitype:string */ public static function getMostViewedOfLastDays($startDate,$limit = 5){ $rval = array( array( '$match'=>array( 'statType'=>StatisticModel::STAT_TYPE_NOTIZIA, 'date'=>array( // '$gte'=>new MongoDate($startDate) '$gte'=>new MongoDB\BSON\UTCDateTime($startDate * 1000) ) ) ), array( '$group'=>array( "_id"=>array( 'notizia'=>'$content.notizia', ), "visualizzazioni"=>array( '$sum'=>1 ) ) ), array( '$sort'=>array( "visualizzazioni"=>-1 ) ), array( '$limit'=>$limit ) ); return $rval; } } ?>