只需获取整个集合

时间:2016-04-22 23:30:40

标签: scala reactivemongo

Mongo 3.2 scalaVersion 2.11.7 活化剂 - 1.3.9

所以我只是简单地抓取整个集合

我尝试使用http://reactivemongo.org/页面上的文档并首先连接

def connect() {
  // gets an instance of the driver
  // (creates an actor system)
  val driver = new MongoDriver
  val connection = driver.connection(List("localhost"))

  // Gets a reference to the database "plugin"
  val db = connection("plugin")

  // Gets a reference to the collection "acoll"
  // By default, you get a BSONCollection.
  val collection = db("acoll")
}

到目前为止一直很好,我有10个连接(如果我已经正确阅读,可以预期)。

然后我尝试修改"简单查询"的文档内容,但遇到IntelliJ说游标[BSONDocument] 已弃用,我应该使用而(我做了)游标()

我最终得到了:

def getAll(collection: BSONCollection) = {
 val query = BSONDocument()
 val filter = BSONDocument(
   "_id" -> 1
 )
 val futureList: Future[List[BSONDocument]] =
   collection.
     find(query, filter).
     cursor().
     collect[List]()

 futureList.map { list =>
   list.foreach {
     doc => println(s"found document: ${BSONDocument pretty doc}")
   }
 }
}

现在在我的控制器中我与Db.connect连接(顺便说一句,Db是一个对象Db {},不知道我是否应该这样做,Scala,Mongodb和Play中的新东西)

var collection = Db.connect()
println("Connected to db : " + collection)
var list = Db.getAll(collection)

...

问题,Db.connect()似乎没有返回BSONCollection而是单位

所以我想知道你们是否可以给我一个像我这样的初学者的暗示......或者

很抱歉,如果这看起来像一个愚蠢的问题,但我甚至对文档感到困惑,因为我无法构建它的一部分

由于

1 个答案:

答案 0 :(得分:0)

Dbval声明结束。

如果您查看各种Scala教程,您会发现它意味着此函数确实返回Unit

如果要返回值而不是在本地分配值,则必须删除声明,只需将最后一行设为db("acoll")

然后你的职能getAll遭受同样的误解。

futureList.map { list =>
  list.foreach {
    doc => println(s"found document: ${BSONDocument pretty doc}")
  } // foreach = Unit
} // so there's Future[Unit]

使用connection("plugin")(又名MongoConnection.apply)的数据库分辨率已弃用且不鼓励。

它建议你深入ReactiveMongo