gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 20:46:37 25 4
gpt4 key购买 nike

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

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

parse[F] 是一个从 Observable 转换的简单函数。这里的问题是我收到一个错误类型不匹配,它表示找到了List[AsyncN1qlQueryResult]而不是必需的List[MyClass]。我应该如何从 AsyncN1qlQueryResult 转换为 MyClass 对象?我正在使用 Circe 来解析文档。

最佳答案

我很高兴地向您报告,现在可以使用原生 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 形式的结果,因此您在获取数据的方式上有很大的灵 active 。

您可以在此处查看如何开始:https://docs.couchbase.com/scala-sdk/1.0alpha/hello-world/start-using-sdk.html

请注意,这是一个 alpha 版本,旨在让社区了解我们的发展方向,并让他们有机会提供反馈。它不应该在生产中使用。论坛 ( https://forums.couchbase.com/ ) 是提出任何反馈的最佳场所。

关于Scala、couchbase - 将 AsyncN1qlQueryResult 转换为自定义对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55299094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com