Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala,couchbase-将AsyncN1qlQueryResult转换为自定义对象_Scala_Couchbase_N1ql - Fatal编程技术网

Scala,couchbase-将AsyncN1qlQueryResult转换为自定义对象

Scala,couchbase-将AsyncN1qlQueryResult转换为自定义对象,scala,couchbase,n1ql,Scala,Couchbase,N1ql,我有一个带有简单数据的案例类: case class MyClass( details: Details, names: List[String], id: String, ) 我已经创建了一个couchbase查询,它应该从数据库中检索所有文档: val query = s"SELECT * from `docs`" for { docs<- bucket .query(N1qlQuery.simple(query))

我有一个带有简单数据的
案例类

case class MyClass(
  details: Details,
  names: List[String],
  id: String,
)
我已经创建了一个couchbase查询,它应该从数据库中检索所有文档:

 val query = s"SELECT * from `docs`"
      for {
        docs<- bucket
          .query(N1qlQuery.simple(query))
          .flatMap((rows: AsyncN1qlQueryResult) => rows.rows())          
          .toList
          .parse[F]
          .map(_.asScala.toList)
      } yield docs
val query=s“从'docs'中选择*
为了{
docs rows.rows())
托利斯先生
.parse[F]
.map(u.asScala.toList)
}收益单据
parse[F]
是一个简单的函数,可以从
Observable
转换。这里的问题是,我得到了一个错误
类型不匹配
,它表示找到了
List[AsyncN1qlQueryResult]
,而不是必需的
List[MyClass]
。如何将
AsyncN1qlQueryResult
转换为
MyClass
对象?
我正在使用
Circe
解析文档。

我很高兴地报告,现在有一个早期版本的native Couchbase Scala SDK可用,它确实支持将N1QL查询的每一行结果直接转换为您的案例类:

case class Address(line1: String)
case class User(name: String, age: Int, addresses: Seq[Address])
object User {
  // Define a Codec so SDK knows how to convert User to/from JSON
  implicit val codec: Codec[User] = Codecs.codec[User]
}

val statement = """select * from `users`;"""

val rows: Try[Seq[User]] = cluster.query(statement)
  .map(result => result
    .rows.flatMap(row => 
      row.contentAs[User].toOption)) 

rows match {
  case Success(rows: Seq[User]) =>
    rows.foreach(row => println(row))
  case Failure(err) =>
    println(s"Error: $err")
}
这是阻塞API。还有一些API允许从反应式编程中以Futures或Flux/Monos的形式获取结果,因此您可以灵活地获取数据

您可以在此处看到如何开始:


请注意,这是一个alpha版本,让社区了解我们的发展方向,并给他们提供反馈的机会。它不应该用于生产。论坛()是您提出任何反馈的最佳场所。

您所要做的就是对这种类型进行隐式自定义转换。如果您将
println(AsyncN1qlQueryResult)
,是否可以显示结果?它是否也可以通过
sbt
使用?确实可以。这些说明将包含在下一版本的文档中:“libraryDependencies+=”com.Couchbase.client“%%”scala client“%”1.0.0-alpha.1“中的解析程序+=”Couchbase快照”