4

aggregatein MongoDBwithを使用していPHPます。コードは次のようになります。

$results = $c->aggregate(array(
    array(
      '$project' => array(
          'day' => array('$dayOfYear' => '$executed')
      ),
    ),
    array(
      '$group' => array(
          '_id' => array('day' => '$day'),
          'count' => array('$sum' => 1)
      ),
    ),
    array(
      '$sort' => array(
          '_id' => 1
      ),
    ),
    array(
      '$limit' => 30
    )
));

これに関する問題は、$dayOfYear2、3、345、346 の順に並べ替えられるため、正しく並べ替えられないことです...日付の昇順にする必要があります。したがって、基本的には単に行うのではなく、次の$dayOfYearようなものが必要です$year-$month-$dayOfMonth

残念ながら、これは機能しません。何か案は?

ありがとう。

4

2 に答える 2

3

これらの部分を射影してグループ化すると、日付全体でグループ化できます。

$results = $c->aggregate(array(
    array(
      '$project' => array(
          'year' => array('$year' => '$executed' ),
          'month' => array('$month' => '$executed' ),
          'day' => array('$dayOfMonth' => '$executed')
      ),
    ),
    array(
      '$group' => array(
          '_id' => array('year' => '$year', 'month' => '$month', 'day' => '$day'),
          'count' => array('$sum' => 1)
      ),
    ),
    array(
      '$sort' => array(
          '_id.year' => 1,
          '_id.month' => 1,
          '_id.day' => 1
      ),
    ),
    array(
      '$limit' => 30
    )
));

あなたが述べたように、そのようなものは、あなたがソートできるようにするトリックを行うはずです: $year-$month-$dayOfMonth.

于 2013-01-05T03:25:09.173 に答える
0

_idオブジェクトを含むように設定したため(奇妙にソートされる可能性があります)、全体でソートするべきではありません$sort

  '$sort' => array(
      '_id.day' => 1
  ),
于 2013-01-05T03:40:08.870 に答える