v0.0.491 small optimization in Paginate method
Some checks failed
Build Docker and Deploy / Run goext test-suite (push) Failing after 8m31s
Some checks failed
Build Docker and Deploy / Run goext test-suite (push) Failing after 8m31s
This commit is contained in:
@@ -60,19 +60,27 @@ func (c *Coll[TData]) Paginate(ctx context.Context, filter pag.MongoFilter, page
|
||||
return nil, pag.Pagination{}, exerr.Wrap(err, "failed to all-decode entities").Build()
|
||||
}
|
||||
|
||||
cursorTotalCount, err := c.coll.Aggregate(ctx, pipelineTotalCount)
|
||||
if err != nil {
|
||||
return nil, pag.Pagination{}, exerr.Wrap(err, "mongo-aggregation failed").Any("pipeline", pipelineTotalCount).Str("collection", c.Name()).Build()
|
||||
}
|
||||
|
||||
var tcRes totalCountResult
|
||||
if cursorTotalCount.Next(ctx) {
|
||||
err = cursorTotalCount.Decode(&tcRes)
|
||||
if err != nil {
|
||||
return nil, pag.Pagination{}, exerr.Wrap(err, "failed to decode mongo-aggregation $count result").Any("pipeline", pipelineTotalCount).Str("collection", c.Name()).Build()
|
||||
}
|
||||
|
||||
if limit == nil {
|
||||
// optimization, limit==nil, so we query all entities anyway, just use the array length
|
||||
tcRes.Count = len(entities)
|
||||
} else {
|
||||
tcRes.Count = 0 // no entries in DB
|
||||
|
||||
cursorTotalCount, err := c.coll.Aggregate(ctx, pipelineTotalCount)
|
||||
if err != nil {
|
||||
return nil, pag.Pagination{}, exerr.Wrap(err, "mongo-aggregation failed").Any("pipeline", pipelineTotalCount).Str("collection", c.Name()).Build()
|
||||
}
|
||||
|
||||
if cursorTotalCount.Next(ctx) {
|
||||
err = cursorTotalCount.Decode(&tcRes)
|
||||
if err != nil {
|
||||
return nil, pag.Pagination{}, exerr.Wrap(err, "failed to decode mongo-aggregation $count result").Any("pipeline", pipelineTotalCount).Str("collection", c.Name()).Build()
|
||||
}
|
||||
} else {
|
||||
tcRes.Count = 0 // no entries in DB
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
paginationObj := pag.Pagination{
|
||||
|
Reference in New Issue
Block a user