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快照”