0

私は基準(cl = 1)を一致させようとしており、すべての結果を月ごとに集計しようとしています(年/月/日も試してみましたが、うまくいきませんでした)。

以下のコードを実行すると、正しく動作しているように見えますが、出力には月などが表示されますが、統計は追加されていません。

Mongo の $du フィールドは MongoDate オブジェクトです。

誰かが私が間違っていることを知っていますか?

日付で検索して結果を返すコード スニペットについては、一番下を参照してください。

        $result = $collection->aggregate(
            array(
                array('$match' => array(
                    'cl' => $app_id) # application id, int such as "2"
                ),
                array('$project' => array(
                    //'year' => array('$year' => '$du'),
                    'month' => array('$month' => '$du'),
                    //'week' => array('$week' => '$du'),
                )),

                array('$group' => 
                    array(
                        '_id' => array(
                            'month' => '$month',
                        ),
                        'i' => array('$sum' => '$vs.i'),
                        'r' => array('$sum' => '$vs.r'),
                        'u' => array('$sum' => '$vs.u'),
                    )
                ),
                array(
                    '$sort' => array(
                        '_id' => -1
                    )
                ),
                array(
                  '$limit' => 14
                )
            )
        );

出力:

Array
(
    [result] => Array
        (
            [0] => Array
                (
                    [_id] => Array
                        (
                            [month] => 10
                        )

                    [i] => 0
                    [r] => 0
                    [u] => 0
                )

            [1] => Array
                (
                    [_id] => Array
                        (
                            [month] => 9
                        )

                    [i] => 0
                    [r] => 0
                    [u] => 0
                )
        .......

作業中 - 日付で検索

$start = new MongoDate(strtotime("2012-10-01 00:00:00"));
$end = new MongoDate(strtotime("2013-10-15 00:00:00"));
$cursor = $collection->find(array("du" => array('$gt' => $start, '$lte' => $end)));
while ($cursor->hasNext()) {
    $document = $cursor->getNext();
    print_r($document);exit;
}

# RESPONSE
Array
(
    [_id] => MongoId Object
        (
            [$id] => 51acbfd33dd49497848a8e5b
        )

    [cl] => 1
    [du] => MongoDate Object
        (
            [sec] => 1370275795
            [usec] => 0
        )

    [vs] => Array
        (
            [i] => 11
            [u] => 1
        )

)   
4

1 に答える 1

1

統計を投影することを選択していないため、統計は表示されません。Project はデフォルトで _id を提供しますが、それ以外は指定する必要があります。

現在の $project の代わりに、次のようなものが必要になります。

array('$project' => array(
    'month' => array('$month' => '$du'),
    'vs' => 1
))
于 2013-10-09T20:50:15.893 に答える