Skip to content

Commit 0acf10c

Browse files
author
QuadStingray
committed
fix: paginated aggregation with empty response
1 parent a71a599 commit 0acf10c

File tree

3 files changed

+42
-8
lines changed

3 files changed

+42
-8
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name" : "mongodb-driver",
33
"organization" : "dev.mongocamp",
4-
"version" : "2.6.3.snapshot",
4+
"version" : "2.6.3",
55
"author" : "[email protected]",
66
"license" : "Apache-2.0",
77
"repository" : {

src/main/scala/dev/mongocamp/driver/mongodb/pagination/MongoPaginatedAggregation.scala

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,17 @@ case class MongoPaginatedAggregation[A <: Any](
4040

4141
val dbResponse = dao.Raw.findAggregated(pipeline, allowDiskUse).result(maxWait)
4242

43-
val count: Long = dbResponse.get(AggregationKeyMetaData).get.asArray().get(0).asDocument().get(AggregationKeyMetaDataTotal).asNumber().longValue()
44-
val allPages = Math.ceil(count.toDouble / rows).toInt
45-
val list = dbResponse.get("data").get.asArray().asScala.map(_.asDocument()).map(bdoc => Document(bdoc))
43+
val count: Long = dbResponse
44+
.get(AggregationKeyMetaData)
45+
.get
46+
.asArray()
47+
.asScala
48+
.headOption
49+
.map(v => v.asDocument().get(AggregationKeyMetaDataTotal).asNumber().longValue())
50+
.getOrElse(0)
51+
52+
val allPages = Math.ceil(count.toDouble / rows).toInt
53+
val list = dbResponse.get("data").get.asArray().asScala.map(_.asDocument()).map(bdoc => Document(bdoc))
4654
PaginationResult(list.toList, PaginationInfo(count, rows, page, allPages))
4755
}
4856

@@ -53,8 +61,16 @@ case class MongoPaginatedAggregation[A <: Any](
5361
val pipeline = aggregationPipeline ++ List(
5462
Aggregates.facet(new Facet(AggregationKeyMetaData, listOfMetaData.asJava), new Facet(AggregationKeyData, listOfPaging.asJava))
5563
)
56-
val dbResponse = dao.Raw.findAggregated(pipeline, allowDiskUse).result(maxWait)
57-
val count: Long = dbResponse.get(AggregationKeyMetaData).get.asArray().get(0).asDocument().get(AggregationKeyMetaDataTotal).asNumber().longValue()
64+
val dbResponse = dao.Raw.findAggregated(pipeline, allowDiskUse).result(maxWait)
65+
val count: Long = dbResponse
66+
.get(AggregationKeyMetaData)
67+
.get
68+
.asArray()
69+
.asScala
70+
.headOption
71+
.map(v => v.asDocument().get(AggregationKeyMetaDataTotal).asNumber().longValue())
72+
.getOrElse(0)
73+
5874
count
5975
}
6076

src/test/scala/dev/mongocamp/driver/mongodb/pagination/PaginationAggregationSpec.scala

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import dev.mongocamp.driver.mongodb.dao.PersonSpecification
77

88
import dev.mongocamp.driver.mongodb.test.TestDatabase._
99
import org.mongodb.scala.bson.conversions.Bson
10-
import org.mongodb.scala.model.Aggregates.{filter, group, sort}
11-
import org.mongodb.scala.model.Filters.{and, equal}
10+
import org.mongodb.scala.model.Aggregates.{ filter, group, sort }
11+
import org.mongodb.scala.model.Filters.{ and, equal }
1212

1313
class PaginationAggregationSpec extends PersonSpecification {
1414

@@ -65,6 +65,24 @@ class PaginationAggregationSpec extends PersonSpecification {
6565

6666
}
6767

68+
"aggregation with empty response" in {
69+
val pipeline = List(filter(and(equal("unknown", "filter"))), groupStage, sortStage)
70+
71+
val pagination = MongoPaginatedAggregation(PersonDAO, pipeline, allowDiskUse = true)
72+
73+
val page = pagination.paginate(1, 10)
74+
75+
(pagination.countResult must be).equalTo(0)
76+
77+
(page.paginationInfo.allCount must be).equalTo(0)
78+
79+
(page.paginationInfo.pagesCount must be).equalTo(0)
80+
81+
(page.databaseObjects.size must be).equalTo(0)
82+
83+
84+
}
85+
6886
}
6987

7088
}

0 commit comments

Comments
 (0)