标签: play-reactivemongo

MongoError没有主节点可用

我们最近升级到了Play 2.7.0,并使用play2-reactivemongo版本0.16.2和reactmongo 0.16.3。我们使用reactivemongo-shaded-native但也尝试不使用。

我们正在连接到具有3个节点的副本集,即MongoDB Atlas上的MongoDB 3.6.10。

初始连接良好,服务运行了一段时间。

但是最后我们遇到了这个错误:

[error] 2019-02-15 09:40:30,466 r.api.Failover2 - [Supervisor-1/Connection-2] Got an error, no more attempts to do. Completing with a failure...

 reactivemongo.core.actors.Exceptions$PrimaryUnavailableException: MongoError['No primary node is available! (Supervisor-1/Connection-2)']
 Caused by: reactivemongo.core.actors.Exceptions$InternalState: null
    at reactivemongo.ConnectAll$IsMaster(400, {{NodeSet Some(PlayappDevelopment-shard-0) Node[playappdevelopment-shard-00-00-tedsb.mongodb.net:27017: Unknown (20/20 available connections), latency=9223372036854775807, authenticated={Authenticated(admin,playapp_rw)}] | Node[playappdevelopment-shard-00-01-tedsb.mongodb.net:27017: Secondary (20/20 available connections), latency=135, authenticated={Authenticated(admin,playapp_rw)}] | Node[playappdevelopment-shard-00-02-tedsb.mongodb.net:27017: Secondary (20/20 available connections), latency=140, authenticated={Authenticated(admin,playapp_rw)}] }})(<time:1550223615628>)
    at reactivemongo.IsMaster(400, {{NodeSet Some(PlayappDevelopment-shard-0) Node[playappdevelopment-shard-00-00-tedsb.mongodb.net:27017: Unknown (20/20 available connections), latency=9223372036854775807, authenticated={Authenticated(admin,playapp_rw)}] | Node[playappdevelopment-shard-00-01-tedsb.mongodb.net:27017: …
Run Code Online (Sandbox Code Playgroud)

scala reactivemongo play-reactivemongo play-framework-2.7

6
推荐指数
1
解决办法
1179
查看次数

使用Play-Reactivemongo插件映射MongoDB _id?

我正在尝试使用Play-ReactiveMongo插件在Play和Angular中读取/写入MongoDB中的简单记录.该插件似乎是一个不错的选择,因为它允许您使用简单的案例类和常规JSON,而不是在BSON和JSON之间显式转换.但是使用插件的几个例子似乎没有涵盖如何在同一框架内将MongoDB对象ID映射到JSON或从JSON映射.这一切似乎都适用于在后台加载隐式(=魔术给我)读取/写入,但它们似乎不处理对象ID.

我的代码基于Alex Lashford的现代Web模板,与使用JSON读/写的Stephan Godbillion的示例非常相似,但Alex和Stephan都没有显示与MongoDB对象ID有关的任何内容.

我的数据记录需要某种唯一的ID,所以我可以获取和更新它们等等,使用MongoDB提供的那个是有意义的,但我似乎无法在Play ReactiveMongo中找到一种干净利用的方法.插入.

有没有人知道一个例子,它展示了如何将Play ReactiveMongo插件与JSON集合一起使用,以及某种方式将对象ID映射到/从JSON,而不必将我的所有处理转换为使用BSON?

scala mongodb playframework play-reactivemongo

6
推荐指数
1
解决办法
684
查看次数

使用reactivemongo 0.12.1与play 2.5.X时出错

我尝试使用play 2.5.12升级到reactive mongo 0.12.1,但是当我运行JVM退出时,我得到以下堆栈跟踪:

来自线程[application-akka.actor.default-dispatcher-2]的未捕获错误因为'akka.jvm-exit-on-fatal-error'为ActorSystem [application]启用而关闭JVM java.lang.NoClassDefFoundError:play/api/javas/concurrent/StateMachine at java.lang.ClassLoader.defineClass1(Native Method)at java.security.ClassLoader.defineClass(ClassLoader.java:763)at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)at java java.net上的..net.URLClassLoader.defineClass(URLClassLoader.java:467)java.net.URLClassLoader.access $ 100(URLClassLoader.java:73)java.net.URLClassLoader $ 1.run(URLClassLoader.java:368). URLClassLoader $ 1.run(URLClassLoader.java:362)java.security.AccessController.doPrivileged(Native Method)at java.net.URLClassLoader.findClass(URLClassLoader.java:361)at java.lang.ClassLoader.loadClass(ClassLoader.java) :424)at java.lang.ClassLoader.loadClass(ClassLoader.java:357)at play.api.libs.streams.impl.EnumeratorSubscriptionFactory $ class.createSubscription(Enumerator)Publisher.scala:25)at play.api.libs.streams.impl.EnumeratorPublisher.createSubscription(EnumeratorPublisher.scala:33)at play.api.libs.streams.impl.EnumeratorPublisher.createSubscription(EnumeratorPublisher.scala:33)at play .api.libs.streams.impl.RelaxedPublisher.subscribe(RelaxedPublisher.scala:19)at akka.stream的akka​​.stream.impl.MaterializerSession.akka $ stream $ impl $ MaterializerSession $$ doSubscribe(StreamLayout.scala:1033). impa.MaterializerSession.assignPort(StreamLayout.scala:1025)at akka.stream.impl.MaterializerSession $$ anonfun $ exitScope $ 2.apply(StreamLayout.scala:907)at akka.stream.impl.MaterializerSession $$ anonfun $ exitScope $ 2.在scala.collection.Iterator $ class.foreach(Iterator.scala:893)的scala.collection.AbstractIterator.foreach(Iterator.scala:1336)at akka.stream.impl.MaterializerSession.exitScope上申请(StreamLayout.scala:906) (StreamLayout.scala:906)akka.stream.impl.MaterializerSession $$ anonfun $ materializeModule $ 1.apply(StreamLayout.scala:958)at akka.stream.impl.Mat erializerSession $$ anonfun $ materializeModule $ 1.apply(StreamLayout.scala:950)at scala.collection.immutable.Set $ Set3.foreach(Set.scala:163)at akka.stream.impl.MaterializerSession.materializeModule(StreamLayout.scala: 950)akka.stream.impl.MaterializerSession.materialize(StreamLayout.scala:917)at …

scala mongodb playframework playframework-2.0 play-reactivemongo

5
推荐指数
1
解决办法
431
查看次数

Play重新加载应用程序时出现奇怪的MongoError(使用ReactiveMongo)

很多时候,当代码更改后Play重新加载应用程序时,我收到以下错误:

MongoError ['无法访问节点集!请检查您的网络连接.']

MongoDB日志如下所示:

2016-09-06T18:51:22.609+0200 I NETWORK  [initandlisten] waiting for connections on port 27017
2016-09-06T18:53:49.916+0200 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:60559 #1 (1 connection now open)
2016-09-06T18:53:51.185+0200 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:60561 #2 (2 connections now open)
2016-09-06T18:53:51.196+0200 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:60562 #3 (3 connections now open)
2016-09-06T18:53:51.206+0200 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:60563 #4 (4 connections now open)
2016-09-06T18:53:51.217+0200 I NETWORK  [initandlisten] connection accepted from 127.0.0.1:60564 #5 (5 connections now open)
2016-09-06T18:53:51.227+0200 …
Run Code Online (Sandbox Code Playgroud)

scala mongodb playframework reactivemongo play-reactivemongo

5
推荐指数
1
解决办法
725
查看次数

如何以 ISO 格式而不是 Long [Play、Scala 和 ReactiveMongo] 在 MongoDB 中存储日期?

我正在尝试使用以下方式在 MongoDB 中插入日期:

collection.insert(Json.obj("user"->"abc", "joined_date" -> DateTime.now))
Run Code Online (Sandbox Code Playgroud)

在数据库中:

   {                                                       
            "_id" : ObjectId("5865d99718969bca6a09450f"),   
            "user" : "abc",                                 
            "joined_date" : NumberLong("1483069847066")     
    }  
Run Code Online (Sandbox Code Playgroud)

这里的问题是日期以长毫秒格式存储在数据库中,但我想要的是它以 ISO 日期格式存储。

我在 MongoShell 中尝试保存相同的数据db.example.insert({user:"abc", joined_date:new Date()}),结果如下:

{
        "_id" : ObjectId("5865d838a4f98c5bb83b1eb8"),
        "user" : "abc",
        "joined_date" : ISODate("2016-12-30T03:44:56.824Z")
}
Run Code Online (Sandbox Code Playgroud)

那么,如何使用 ReactiveMongo 在数据库中以 ISODate 格式存储日期?

scala mongodb playframework reactivemongo play-reactivemongo

4
推荐指数
1
解决办法
1776
查看次数

升级到ReactiveMongo 0.12.RC3时类型不匹配

我目前升级到0.12.RC3,希望能解决我遇到的以下问题.升级后,我收到了该collect方法的弃用警告.

所以我离开了:

def find(query: JsObject = Json.obj())(implicit reader: Reads[T]): Future[List[T]] = {
    collection.flatMap(_.find(query).cursor[T](ReadPreference.nearest).collect[List]())
}
Run Code Online (Sandbox Code Playgroud)

至:

def find(query: JsObject = Json.obj())(implicit reader: Reads[T]): Future[List[T]] = {
    collection.flatMap(_.find(query).cursor[T](ReadPreference.nearest).collect[List](Int.MaxValue, Cursor.FailOnError()))
}
Run Code Online (Sandbox Code Playgroud)

但是,遗憾的是我收到以下错误:

类型不匹配,预期:(​​JSONCollection)=> Future [NotInferedS],actual:(JSONCollection)=> Any

scala reactivemongo play-reactivemongo

2
推荐指数
1
解决办法
768
查看次数

Action(parser.json)vs Action.async错误,并使用concurrent.Execution.Implicits make无法在Play Scala中初始化类控制器

我正在尝试使用以下方法创建一个向mongoddb插入数据的帖子请求:1.sbt 0.13.6 2.播放2.10 3. scala 2.11.2 4. play2-reactivamongo 0.10.2 5. mongodb 2.6.4

数据由json发布,并为模型创建一个case类,并使用JSPath将json转换为实体类.

这是我的示例代码:

def inserTransaction = Action(parser.json) { implicit request =>

   val json = request.body
   val data = json.as[Transaction]
   Logger.info(data.toString)
   val future = collection.insert(data.copy(id = Option[BSONObjectID](BSONObjectID.generate)))
   var result = ""

   future.onComplete {
     case Failure(t) => result = "An error has occured: " + t.getMessage
     case Success(post) => result = "success"
   }
   Ok(result)
}
Run Code Online (Sandbox Code Playgroud)

我已经看到一些示例代码使用Action.sync来处理控制器中的异步,但是当我尝试使用Action.sync时,我的Intellij IDE检测到错误"无法将Action.sync解析为签名",我试图改变像这样的功能的结果

future.onComplete {
    case Failure(t) => Ok("An error has occured: " + t.getMessage)
    case Success(post) …
Run Code Online (Sandbox Code Playgroud)

json asynchronous scala playframework play-reactivemongo

0
推荐指数
1
解决办法
1651
查看次数

如何使用Play的JSON库在ReactiveMongo中对带有查询的文档进行计数?

让我们考虑一下我有一个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。

scala mongodb reactivemongo play-reactivemongo

0
推荐指数
1
解决办法
1291
查看次数