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

时间:2015-02-18 06:03:45

标签: mongodb scala 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个结果?

1 个答案:

答案 0 :(得分:0)

我基本上偶然发现了同样的事情。

事实证明,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)