标签: reactivemongo

我需要做什么才能移植 ReactiveMongo scala 以使用猫效果?

如果我想在诸如 http4s 之类的东西中使用 ReactiveMongo,我必须将 ReactiveMongo 返回的所有 Future 调用包装在 Cats IO 效果中,这样说是否正确?

概括地说,将 ReactiveMongo 合并到 http4s 中需要哪些步骤?

scala reactivemongo cats-effect

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

错误:"无法找到参数readFileReader的隐式值"尝试使用带有reactivemongo的GridFS保存文件

我试图使用以下代码在Play 2.1中使用reactivemongo保存附件:

def upload = Action(parse.multipartFormData) { request =>
    request.body.file("carPicture").map { picture =>
    val filename = picture.filename
    val contentType = picture.contentType

    val gridFS = new GridFS(db, "attachments")
    val fileToSave = DefaultFileToSave(filename, contentType)

    val futureResult: Future[ReadFile[BSONValue]] = gridFS.writeFromInputStream(fileToSave, new FileInputStream(new File(filename)))

    Ok(Json.obj("e" -> 0))
  }.getOrElse {
    Redirect(routes.Application.index).flashing(
      "error" -> "Missing file"
    )
  }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

找不到参数readFileReader的隐含值:reactivemongo.bson.BSONDocumentReader [reactivemongo.api.gridfs.ReadFile [reactivemongo.bson.BSONValue]] [error] val futureResult:Future [ReadFile [BSONValue]] = gridFS.writeFromInputStream(fileToSave, new FileInputStream(new File(filename)))

我错过了什么?

谢谢,

GA

scala mongodb playframework-2.1 reactivemongo

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

如何在ReactiveMongo模型中表示GeoJSON点?

为了做到空间查询MongoDB中的文档与位置(有2d2dsphere地理空间指数)应该是这个样子:

{
    _id: …,
    loc: {
        type: "Point",
        coordinates: [ <longitude>, <latitude> ]
    }
}
Run Code Online (Sandbox Code Playgroud)

我是Scala,ReactiveMongo和Play Framework的新手,但在我看来,使用这样一个位置的一个明显方法是通过一个案例类:

case class Point(lon: Double, lat: Double)
Run Code Online (Sandbox Code Playgroud)

网站的API处理的JSON表示应该类似于:

{
    _id: …
    loc: [ <longitude>, <latitude> ]
}
Run Code Online (Sandbox Code Playgroud)

现在,我无法弄清楚如何告诉我的ReactiveMongo模型在这些格式之间进行序列化/反序列化.

我的控制器看起来像这样:

package controllers

import play.api._
import play.api.mvc._
import play.api.libs.json._
import scala.concurrent.Future

// Reactive Mongo imports
import reactivemongo.api._
import scala.concurrent.ExecutionContext.Implicits.global

// Reactive Mongo plugin
import play.modules.reactivemongo.MongoController
import play.modules.reactivemongo.json.collection.JSONCollection

object Application extends Controller with MongoController {
    def collection: JSONCollection = db.collection[JSONCollection]("test")

    import play.api.data.Form
    import …
Run Code Online (Sandbox Code Playgroud)

scala mongodb playframework reactivemongo playframework-2.2

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

在mongo3升级之后,获取"未授权对db.collection'(code = 13)进行查询的DatabaseException

我使用免费的MongoLab,我的数据库在周末升级到Mongo 3,现在我的客户端无法连接.我一直收到'未经授权的db.collection查询'.错误.

Mongolab说我应该使用Mongo 3兼容驱动程序(http://docs.mongodb.org/manual/release-notes/3.0-compatibility/#driver-compatibility-changes).我正在使用scala ReactiveMongo客户端,版本0.11.7,它应该支持Mongo 3.

mongodb mlab reactivemongo

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

如何以 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
查看次数

(反应性)Mongo测试失败:无法识别的字段'快照'

我在BitBucket管道中运行的测试"突然"开始失败并出现此错误:无法识别的字段'snapshot'(代码= 9).

在本地测试都运行正常.本地和BitBucket我都使用Mongo 3.7 docker容器.活跃的Mongo版本是0.13.0

任何人都知道为什么会这样,以及如何解决这个问题?

mongodb reactivemongo bitbucket-pipelines

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

Scala - 需要单位:play.api.mvc.SimpleResult

我真的很困惑,我可能会错过一些明显的东西,所以如果有人能指出我正确的方向会很棒.

我有以下函数返回SimpleResult类型的未来,但它有一个单位.我不确定为什么会这样说,因为我正在映射futureList结果

  def find(key: String, value: String) = Future[SimpleResult] {

  val cursor: Cursor[JsObject] = coll.
    find(Json.obj(key -> value)).
    cursor[JsObject]

  val futureList: Future[List[JsObject]] = cursor.collect[List]()

  val futureResult: Future[SimpleResult] = futureList.map { item =>

    if(item.isEmpty) {

        Ok(JsArray()).as(JSON)
    }
    else 
         Ok(Json.toJson(item))     
 }
} 
Run Code Online (Sandbox Code Playgroud)

编辑

我从Marth的建议中将其改为以下内容

  def find(key: String, value: String) = Future[SimpleResult] {

  val cursor: Cursor[JsObject] = coll.
    find(Json.obj(key -> value)).
    cursor[JsObject]

  val futureList: Future[List[JsObject]] = cursor.collect[List]()

   futureList.map { item =>  Ok(Json.toJson(item))    }

}
Run Code Online (Sandbox Code Playgroud)

Eclipse警告以下内容

类型不匹配; 发现:scala.concurrent.Future [play.api.mvc.SimpleResult]必需:play.api.mvc.SimpleResult

虽然该函数是为了返回一个scala.concurrent.Future [play.api.mvc.SimpleResult]

functional-programming scala playframework reactivemongo

3
推荐指数
1
解决办法
1803
查看次数

用理解来构建期货

我有一个使用ReactiveMongo和MongoDB的Play Framework应用程序,我有以下代码:

def categories(id: String): Future[Vector[Category]] = {...}
....
val categoriesFuture = categories(id)
for {
  categories: Vector[Category] <- categoriesFuture
  categoryIdsWithoutPerson: Vector[BSONObjectID] <- findCategoryIdsWithoutPerson(categories.map(_.id), personId) //Returns Future[Vector[BSONObjectID]]
  categoriesWithoutPerson: Vector[Category] <- categories.filter(category => categoryIdsWithoutPerson.contains(category.id)) //Play cites the error here
} yield categoryIdsWithoutPerson
Run Code Online (Sandbox Code Playgroud)

为了解释这个代码,我去取VectorCategories包裹在Future,因为这是ReactiveMongo如何汇总.在for理解中,我使用它Vector来从数据库中获取id列表.最后,我使用一个filter调用来保留那些id可以在id列表中找到的类别.

这一切看起来都相当简单.问题是Play在for理解的最后一行给出了以下编译错误:

pattern type is incompatible with expected type;
 found   : Vector[com.myapp.Category]
 required: com.myapp.Category
Run Code Online (Sandbox Code Playgroud)

我不确定为什么所需类型是单个实例Category.

我可以使用一些洞察我做错了什么和/或是否有更简单或更惯用的方法来实现这一点.

scala future for-comprehension reactivemongo

3
推荐指数
1
解决办法
271
查看次数

Scala用于理解Future,List和Option

我在斯卡拉建设一个活性位点和播放框架,以及我的数据模型是这样的,我经常需要编写FutureOption,并建立FutureList/ Set以前的值以得到结果,我所需要的.

我写了一个带有假数据源的简单应用程序,你可以复制和粘贴它,它应该编译.我的问题是,在我的情况下UserContext,如何以可消耗的形式取回结果.目前,我要回来了Future[Option[Future[UserContext]]].

我想在纯Scala中这样做以更好地学习语言,所以我现在正在避开Scalaz.虽然我知道我最终应该使用它.

package futures

import scala.concurrent.{Future, ExecutionContext}

// http://www.edofic.com/posts/2014-03-07-practical-future-option.html
case class FutureO[+A](future: Future[Option[A]]) extends AnyVal {

  def flatMap[B](f: A => FutureO[B])(implicit ec: ExecutionContext): FutureO[B] = {
    FutureO {
      future.flatMap { optA =>
        optA.map { a =>
          f(a).future
        } getOrElse Future.successful(None)
      }
    }
  }

  def map[B](f: A => B)(implicit ec: ExecutionContext): FutureO[B] = {
    FutureO(future.map(_ map f))
  }
}

// ========== USAGE OF FutureO BELOW ============= …
Run Code Online (Sandbox Code Playgroud)

scala future playframework reactivemongo

3
推荐指数
1
解决办法
1109
查看次数

如何使用 ReactiveMongo 设置 Play!2.5

我使用 Scala 连接到 MongoDB:

val driver = new MongoDriver
val connection = driver.connection(List("myhost"))
val db = connection.database("mydb")
Run Code Online (Sandbox Code Playgroud)

这工作正常,但如何将其与 Play 控制器集成:

@Singleton
class ReactiveController @Inject() (implicit system: ActorSystem, materializer: Materializer, val reactiveMongoApi: ReactiveMongoApi)
    extends Controller with MongoController with ReactiveMongoComponents {
Run Code Online (Sandbox Code Playgroud)

我需要在ReactiveMongoApi我的数据库配置中注入自定义吗?

或者我需要用我的数据库设置修改 application.conf 吗?

我正在使用 play 2.5 和http://reactivemongo.org/releases/0.11/documentation/tutorial/play2.html提供了这个代码:

package api

import reactivemongo.api.{ DB, MongoConnection, MongoDriver }

trait ReactiveMongoApi {
  def driver: MongoDriver
  def connection: MongoConnection
  def db: DB
}
Run Code Online (Sandbox Code Playgroud)

但我不确定如何将它与我的 Play 应用程序集成?

我想我不知道使用 Play 配置数据库源的一些标准方法!应用 ?

scala mongodb playframework reactivemongo

3
推荐指数
1
解决办法
1908
查看次数