Мне нужно понять, как использовать 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]);