2

$groupにパイプする前に、集計フレームワークでPHP MongoDBドライバーを使用していくつかの日付をフィルタリングしようとしましたが、一致は日付のフィルタリングを行っていませんが、文字列とintをフィルタリングする場合は完全に機能します.

これが私のパイプライン配列とコードです:

  $date = new DateTime();
    $date->sub(new DateInterval('PT' . $hours . 'H'));
    $mdate = new MongoDate($date->getTimestamp());
    $ops = array(
        array('$match') => array(
            'whenField' => array(
                '$gt' => $mdate
            )
        )
    );

$results = $this->collection->aggregate($ops);

これにより、'whenField' が過去 3 時間以内のコレクション内のすべてのドキュメントが返されるはずですが、コレクション内のすべてのドキュメントが返されます。次に、「$gt」を「$lt」に切り替えると、コレクション内のすべてのドキュメントも返されます。これとまったく同じ一致配列をフィルターとして使用find($filter)して使用したところ、正しくフィルター処理されました。日付の比較は集計フレームワーク $match と互換性がありませんか、それとも何らかのエラーが発生しましたか?

4

1 に答える 1

3

ここ$opsでは間違っています。試してください:

$ops = array(
    array('$match' => array(
        'whenField' => array(
            '$gt' => $mdate
        )
    )
);

その代わり

于 2013-01-08T13:38:08.620 に答える