我在喷雾,akka,scala,reactivemongo项目工作,我有这个特点
trait PersistenceManager {
val driver = new MongoDriver
val connection = driver.connection(List("localhost"))
def loan[A](collectionName: String)(f: BSONCollection => Future[A]): Future[A] = {
val db = connection("flujo_caja_db")
val collection = db.collection(collectionName)
f(collection)
}
}
Run Code Online (Sandbox Code Playgroud)
我也有Dao的对象使用这样的特性:
object Dao extends PersistenceManager {
def find = loan("users"){
collection =>
collection.find(BsonDocument())....
}
}
Run Code Online (Sandbox Code Playgroud)
在我的持久性管理器特征中实现这些数据库val是正确的吗?它的效果非常好.
谢谢!
我很想使用reactiveMongo 实现CRUD 操作,这里是我从在线教程中找到的函数。
def findTicker(ticker: String) = {
val query = BSONDocument("firstName" -> ticker)
val future = collection.find(query).one
future.onComplete {
case Failure(e) => throw e
case Success(result) => {
println(result)
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个结果:
Some(BSONDocument(<non-empty>))
我如何才能真正看到我正在寻找的实际可读 JSON 数据:
{ "_id" : ObjectId("569914557b85c62b49634c1d"), "firstName" : "Stephane", "lastName" : "Godbillon", "age" : 29 }
奇怪的问题:当我的播放应用程序尝试在使用reactivemongo时插入/更新来自某些mongoDB集合的记录时,操作似乎失败了一个神秘的消息,但实际上,记录插入/更新了.
更多信息:
错误信息是:
play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[LastError: DatabaseException['<none>']]]
at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:280)
at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:206)
at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:100)
at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:99)
at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:344)
at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:343)
at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:32)
at play.api.libs.iteratee.Execution$trampoline$.execute(Execution.scala:70)
at scala.concurrent.impl.CallbackRunnable.executeWithValue(Promise.scala:40)
at scala.concurrent.impl.Promise$DefaultPromise.tryComplete(Promise.scala:248)
Caused by: reactivemongo.api.commands.LastError: DatabaseException['<none>']
Run Code Online (Sandbox Code Playgroud)
使用ReactiveMongo 0.11.14,Play 2.5.4,Scala 2.11.7,MongoDB 3.4.0.
谢谢!
更新 - 神秘感增厚!
根据@ Yaroslav_Derman的回答,我添加了一个.recover条款,如下:
collectionRef.flatMap( c =>
c.update( BSONDocument("_id" -> publicationWithId.id.get), publicationWithId.asInstanceOf[PublicationItem], upsert=true))
.map(wr => {
Logger.warn("Write Result: " + wr )
Logger.warn("wr.inError: " + wr.inError)
Logger.warn("*************")
publicationWithId
}).recover({
case de:DatabaseException => {
Logger.warn("DatabaseException: " + …Run Code Online (Sandbox Code Playgroud) 我正在用reactivemongo做测试
在我的控制器中我有这个:
package controllers
import models._
import models.JsonFormats._
import play.modules.reactivemongo.MongoController
import scala.concurrent.Future
import reactivemongo.api.Cursor
import org.slf4j.{LoggerFactory, Logger}
import javax.inject.Singleton
import play.api.mvc._
import reactivemongo.api.collections.default.BSONCollection
import reactivemongo.bson._
@Singleton
class Users extends Controller with MongoController {
private final val logger: Logger = LoggerFactory.getLogger(classOf[Users])
val collection = db[BSONCollection]("users")
// list all articles and sort them
def list = Action.async { implicit request =>
// get a sort document (see getSort method for more information)
val sort = getSort(request)
// build a selection document with …Run Code Online (Sandbox Code Playgroud) 当我找到时,我从MongoDB返回以下文档列表"campaignID":"DEMO-1".
[
{
"_id": {
"$oid": "56be0e8b3cf8a2d4f87ddb97"
},
"campaignID": "DEMO-1",
"revision": 1,
"action": [
"kick",
"punch"
],
"transactionID": 20160212095539543
},
{
"_id": {
"$oid": "56c178215886447ea261710f"
},
"transactionID": 20160215000257159,
"campaignID": "DEMO-1",
"revision": 2,
"action": [
"kick"
],
"transactionID": 20160212095539578
}
]
Run Code Online (Sandbox Code Playgroud)
现在,我在这里尝试做的是给定的campaignID我需要找到它的所有版本(在我的情况下是修订版)并将action字段修改为deadString类型.我阅读了文档,他们的例子太简单了,在我的案例中没有太大帮助.这就是文档所说的:
val selector = BSONDocument("name" -> "Jack")
val modifier = BSONDocument(
"$set" -> BSONDocument(
"lastName" -> "London",
"firstName" -> "Jack"),
"$unset" -> BSONDocument(
"name" -> 1))
// get a future update
val …Run Code Online (Sandbox Code Playgroud) 让我们考虑一下我有一个users具有age属性的集合。现在,我要计算集合中的所有文档users或仅统计与age属性匹配的文档。因此,我做了以下工作:
def count(age: Option[Int] = None) = {
if (age.isEmpty) roles.count()
else users.count(Json.obj("age" -> age))
}
Run Code Online (Sandbox Code Playgroud)
问题是users.count(Json.obj("age" -> age))抛出编译错误,因为count反应性mongo提供的方法需要类型Option[pack.Document]。知道我该如何解决吗?
如果重要的话,我正在使用Reactive Mongo版本0.11.11。
我正在尝试在 playframework 中使用带有reactivemongodb的事务。我该怎么做,或者是否有任何可用于 playframework 的文档?