如何在 reactivemongo 中只打印 2 个结果

How to print only 2 result in reactivemongo

在 reactivemongo 中,我的查询如下所示:

val result =collName.find(BSONDocument("loc" -> BSONDocument("$near" ->
           BSONArray(51,-114)))).cursor[BSONDocument].enumerate()

result.apply(Iteratee.foreach { doc => println(+BSONDocument.pretty(doc))})

我只想打印前 2 个结果,所以我在枚举中传递了 maxdocs 值,然后查询是

val result =collName.find(BSONDocument("loc" -> BSONDocument("$near" ->
         BSONArray(51,-114)))).cursor[BSONDocument].enumerate(2)

result.apply(Iteratee.foreach { doc => println(+BSONDocument.pretty(doc))})

但是它不起作用,它打印查询的所有文档。

如何只打印前 2 个结果?

我基本上是被同样的事情绊倒了。

事实证明,ReactiveMongo 驱动程序会分批传输结果文档,仅在要加载下一批文档时才考虑 maxDocs 设置。

您可以将批量大小配置为等于 maxDocs 限制或其适当的除数:

val result = collName.
  find(BSONDocument("loc" -> BSONDocument("$near" -> BSONArray(51,-114)))).
  options(QueryOpts(batchSizeN = 2)).
  cursor[BSONDocument].enumerate(2)

或者,让 MongoDB 选择批量大小并使用 Enumeratee 限制您处理的文档:

val result = collName.
  find(BSONDocument("loc" -> BSONDocument("$near" -> BSONArray(51,-114)))).
  cursor[BSONDocument].
  enumerate(2) &> Enumeratee.take(2)