Мне нужно выяснить, как использовать AggregationBuilder с allowDiskUse для моего собственного запроса - PullRequest
0 голосов
/ 06 августа 2020

Мне нужно понять, как использовать AggregationBuilder и пример с QueryBuilder, что тоже могло бы быть отличным воспроизведением для моего собственного запроса

db.getCollection('AwinProduct').find(
   { $text: { 
       $search: "Sko Nike Classic Cortez för män -Svart",
       $language: 'sv' 
   } },
   { score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" }, aw_product_id: 1 } ).skip(2).limit(2)

в src/DocumentRepository/AwinProductRepository.php Я выполнил успешный запрос именно то, что я нужен два подхода, например:

    $client = $this->getDocumentManager()->getClient();

    $connection = $client->getManager();

    $filter = ['$text' => ['$search' => "Sko Nike Classic Cortez för män -Svart", '$language' => 'sv']];


    $options = [
        'skip' => 2,
        'limit' => 2,
        'projection' => [
            'score' => ['$meta' => 'textScore']
        ],
        'sort' => [
            'score' => ['$meta' => 'textScore']
        ]
    ];

    $query = new \MongoDB\Driver\Query($filter, $options);
    $rows = $connection->executeQuery('symfony.AwinProduct', $query);
    $toArray = $rows->toArray();

    $collection = $client->symfony->AwinProduct;
    $cursor = $collection->find(
        ['$text' => ['$search' => 'Sko Nike Classic Cortez för män -Svart', '$language' => 'sv']],
        [
            'skip' => 2,
            'limit' => 2,
            'projection' => [
                'score' => ['$meta' => 'textScore']
            ],
            'sort' => [
                'score' => ['$meta' => 'textScore'], 'aw_product_id' => 1
            ]
        ]
    );

, но не понимаю, как использовать для этого AggregationBuilder, потому что в моем случае, когда у меня есть db с миллионом строк и одновременно используются сортировка и ограничение с пропуском Мне нужно использовать allowDiskUse' => true, эта возможность доступна в AggregationBuilder

     $purchase = $builder->execute(['allowDiskUse' => true]);
...