1

我可能错过了一些明显的东西,但是在 ReactiveMongo API (v0.8) 中,你如何设置查询返回的文档数量限制?

我想返回添加到集合中的最新文档。到目前为止,这是我的代码:

def getLatest()(implicit reader: reactivemongo.bson.handlers.RawBSONReader[T]):     Future[Option[T]] = {
    collection.find (QueryBuilder(
        queryDoc = Some(BSONDocument()),
        sortDoc = Some(BSONDocument("_id" -> BSONInteger(-1)))
    )).headOption().mapTo[Option[T]]
}

headOption() 用于检索单个结果,但我没有明确使用任何类型的 Mongo 限制子句,所以我担心这个查询对数据库的影响。请帮助我改进此代码。提前致谢。

4

2 回答 2

3

在 0.8 中,您必须将batchSize选项设置1为以告诉 MongoDB 自动关闭数据库游标:

val maybedoc = collection.find(BSONDocument(), QueryOpts().batchSize(1)).headOption
// or using QueryBuilder like you do
val maybedoc2 = collection.find (QueryBuilder(
    queryDoc = Some(BSONDocument()),
    sortDoc = Some(BSONDocument("_id" -> BSONInteger(-1)))
), QueryOpts().batchSize(1)).headOption()

在 0.9 中,集合已被重构并大大简化。现在你可以这样做:

val maybedoc = collection.
                 find(BSONDocument()).
                 sort(BSONDocument("_id" -> -1)).
                 one[BSONDocument]

0.9 中的one[T]方法为您设置了 batchSize 标志并返回一个Option[T].

于 2013-04-27T17:53:05.770 回答
1

是的,headOption() 函数将查询限制为一个结果:

def headOption()(隐式 ec: ExecutionContext) :Future[Option[T]] = {
  收集[Iterable](1).map(_.headOption)
}

https://github.com/zenexity/ReactiveMongo/blob/0.8/src/main/scala/api/cursor.scala#L180

于 2013-04-27T16:09:20.730 回答