我可能错过了一些明显的东西,但在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限制子句,所以我担心这个查询对数据库的影响。请帮我改进这段代码。提前谢谢。
答案 0 :(得分: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]
。
答案 1 :(得分:1)
是的,headOption()函数将查询限制为只有一个结果:
def headOption()(implicit ec: ExecutionContext) :Future[Option[T]] = { collect[Iterable](1).map(_.headOption) }
https://github.com/zenexity/ReactiveMongo/blob/0.8/src/main/scala/api/cursor.scala#L180