1

locationという特定のフィールドでクエリを実行し、フィールドで並べ替えて、pos各フィールドの最高値のみを返したいドキュメントのコレクションがありposます。

したがって、現在のクエリは次のようになります。

$locations = array(1,2,3,4,5,6);

   $results = $this->dm->createQueryBuilder('\App\Document\Test')
        ->select('id', 'word', 'pos','change', 'title', 'coll_at', 'location')
        ->field('location')->in($locations)
        ->sort('location', 'asc')
        ->sort('pos', 'asc')
        ->getQuery()->execute();

しかし、特定のlocationそれぞれに対して異なるの複数のエントリが存在する可能性があるためpos、後でデータを操作するために foreach ループを作成する必要があります。このシナリオでは、データが返された後にデータを変更するだけのショートカットを使用できますが、それを行うのがまったく効率的でない他のシナリオがあります。groupそこで、この小さなシナリオを作成して、Doctrine ODM のクエリを使用する方法、またはマップして縮小する方法を試してみました。最善の方法がわからない。現在の合計などを取得する例がたくさんあります。

posでは、特定のフィールドごとに最大の数値を取得するクエリを作成するにはどうすればよいでしょうlocationか。location同じでも値が異なる複数のドキュメントが存在する可能性があることを知っていposます。その上に、上でリストした選択したレコードのすべてのフィールドを->select()

4

2 に答える 2

5

Map Reduce でグループ化する代わりに、以下でグループ化できます。

group()Doctrines distinct のデフォルトの実装は、基本的に MR ラップされた MongoDBの古いコマンドで実際に機能すると信じていることに注意してください。

では、特定の場所ごとに pos フィールドで最大の数値を取得するクエリを作成するにはどうすればよいでしょうか

それはうまくいくかもしれませんが、そうでない場合は集約フレームワークを使用する必要がありますが、Doctrine ではフレームワークの残りの部分にリンクする真のヘルパーがないように見えるため、これは少し難しくなります: https:/ /github.com/doctrine/DoctrineMongoDBBundle/issues/165commandしたがって、それを実行するには関数が必要です。

編集

私はDoctrine初心者なので、これは例から取られています:

$connection = $this->get('doctrine_mongodb')->getConnection();
$mongo = $connection->getMongo();
if(!$mongo){
    $connection->connect();
    $mongo = $connection->getMongo();
}
$db = $mongo->selectDB('test_database');
$aggregate_results = $db ->command(array( 
            "aggregate" => "my_collection",
            "pipeline" => 
                array( 
                    array( '$group' => array( 'location' => '$location', 'pos' => array('$sum' => '$pos'))),
                    array( '$sort' => array( "pos" =>1 ) )
                )
        ));

これはあなたのために集計を実行しますが、それはあなたが探しているものとまったく同じではありませんが、それを試してみてください.

于 2012-12-13T08:27:07.057 に答える
0

Sammayeの答えに加えて。Doctrine ODM はグループクエリをサポートしています:

http://doctrine-mongodb-odm.readthedocs.org/en/latest/reference/query-builder-api.html#group-queries

于 2014-07-29T10:02:11.960 に答える