我正在使用scala的play框架,我想从mongodb数据库中获取数据。如何获取/返回与令牌和get控制器相关的true
/ false
而不是def registers(userId:String,token: String): Boolean = {
val query = BSONDocument("token" -> token)
val ret = Await.result(db.find(query).one[BSONDocument], 25.seconds)
if(ret.isDefined){
true
} else{
false
}
}
/ %d
的记录。这是我模型中的代码:
%f
答案 0 :(得分:2)
RobertUdah试图说的是你没有存储BSONDocument,你存储的模型最终将存储为数据库中的BSONDocument / JSONDocument。你可能想要的还不仅仅是返回一个BSONDocument而是一个特定的模型。因此,您应该考虑创建编写器和读者,以便将您的BSONDocument转换为用户(例如),反之亦然。
因此,如果您使用reactivemongo作为驱动程序,则应查看文档:{{3}}
这是一个从数据库中返回Person的段落。
但是如果你真的只想返回BSONDocument,那么db.find(query).one[BSONDocument]
就会返回Future[Option[BSONDocument]]
。因此Await.result(db.find(query).one[BSONDocument], 25.seconds)
将返回Option[BSONDocument]
。这意味着您的价值回报已经是您正在寻找的结果。
如果你想访问BSONDocument本身,你应该做一些模式匹配来提取它,例如:
ret match {
case Some(document): //do something with your document
case None: //The document was not found
}
而不仅仅是检查if (ret.isDefined)
。
另一方面,如果你可以避免使用Await那就更好了!您可以直接使用未来并在地图中处理结果,例如:
db.find(query).one[BSONDocument].map{
case Some(document): //Do the thing
case None: //The document was not found
}
这意味着地图内的代码将在未来完成后立即执行。但我真的不知道你想要做什么。
因此,根据您的代码,如果您保留Await
,最终会得到类似的内容:
def registers(userId:String,token: String): Boolean = {
val query = BSONDocument("token" -> token)
val ret = Await.result(db.find(query).one[BSONDocument], 25.seconds)
ret match {
case Some(doc): //Process it
true
case None: //Do something else
false
}
}