如何解决在跳过和限制应用聚合构建器之前获取记录总数 symfony
我在 TransactionRepository.PHP 中有以下查询
//Query Builder
$qb = $this->createqueryBuilder();
//Aggregation Builder
$builder = $this->getDocumentManager()->createAggregationBuilder(Transaction::class);
//pagination request from frontend
$start = $filters['start'];
$length = $filters['length'];
//query conditions
if ($filters['query']) {
$r = new \MongoRegex('/'.$filters['query'].'/i');
try {
$builder -> match()
->addAnd(
$qb->expr()
->addOr($qb->expr()->field('id')->equals(new ObjectId($filters['query'])))
);
}catch (\Exception $e) {
$builder -> match()
->addAnd(
$qb->expr()
->addOr($qb->expr()->field('externalId')->equals($r))
->addOr($qb->expr()->field('buyerIdentifier')->equals($r))
->addOr($qb->expr()->field('paddedCardNumber')->equals($r))
->addOr($qb->expr()->field('buyerIdentifier')->equals($r))
->addOr($qb->expr()->field('providerBrandName')->equals($r))
->addOr($qb->expr()->field('securityWord')->equals($r))
);
}
}
if ($filters['merchants']) {
array_walk($filters['merchants'],function (&$i) {
$i = new \MongoId($i);
});
$builder -> match()
-> addAnd(
$qb->expr()->addAnd($qb->expr()->field('merchantId')->in($filters['merchants']))
);
}
$builder
->lookup('companies')
->localField('merchantId')
->foreignField('_id')
->alias('merchant')
//flatten the result
->unwind('$merchant');
if ($filters['hydrate']) {
$builder -> hydrate(Transaction::class);
} else {
$builder ->project()
->includeFields([
'id','merchant._id','merchant.TradingName','state','provider','amount','created','currency','history'
]);
}
$builder ->sort(['created' => 'DESC']);
if (!is_null($start) && !is_null($length)) {
$builder ->skip($start)
->limit($length);
}
return $builder ->execute(["allowdiskUse" =>true])->toArray();
我想在 skip()
和 limit()
应用之前有一个总数。
假设 $start =0
和 $length = 10
,我的 MongoDB 中总共有 100 条记录,我想在 limit
应用之前将总记录数绑定。我怎样才能做到这一点?我知道我必须使用 facet()
但我不知道如何在aggregationBuilder 中实现它。提前致谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。