0

私はいくつかのコレクションを持っています:

$data_to_insert = array('date'=> $current_date, 'str_date' => $today_date_str, 'user_id' => intval($post->post_author), 'post_id' => $post->ID, 'user_ip' => current_user_ip());

そして、私はmongoデータベースからいくつかのデータを取得します(それは機能しています):

$start = new MongoDate(strtotime("-14 days"));
$end = new MongoDate(strtotime(date("Y-m-d H:i:s")));

$last_day_query = $hits_collection->find(array("date" => array('$gt' => $start, '$lte' => $end), "user_id" => $current_user->ID));

データを日ごとにグループ化するには、クエリをどのように変更する必要がありますか?

4

2 に答える 2

2
$ops = array(
                array(
                        '$match' => array(
                                            'user_id' => $current_user->ID,
                                            'date' => array(
                                                            '$gt' => $start, 
                                                            '$lte' => $end
                                                            ) 
                                        ),
                    ),
                array(
                        '$project' =>array(
                                            'date' => 1, 
                                            'user_id' => 1
                                            ), 
                        '$group' => array('_id' => '$str_date', 'views' => array('$sum' => 1)),
                ),

    );

    $result = $hits_collection->aggregate($ops);
于 2013-03-04T11:54:42.097 に答える
1

次のように、集計と$group演算子を使用します。

$result = $collection->aggregate([
    ['$match' => ['date' => ['$gt' => $start, '$lt' => $end]]],
    ['$group' => ['_id' => ['date' => '$date']]]
]);

しかし、それは純粋な日付でグループ化されます。$ dayOfMonth演算子を使用して、日ごとにグループ化できます。

['$group' => ['_id' => ['date' => ['$dayOfMonth' => '$date']]]]
于 2013-03-04T10:35:18.187 に答える