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

时间:2019-03-22 11:55:58

标签: scala couchbase n1ql

我有一个带有简单数据的case class

case class MyClass(
  details: Details,
  names: List[String],
  id: String,
)

我创建了一个沙发床查询,该查询应该从数据库中检索所有文档:

 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进行转换。这里的问题是我得到一个错误type mismatch,该错误表明找到了List[AsyncN1qlQueryResult]而不是必需的List[MyClass]。如何将AsyncN1qlQueryResult转换为MyClass对象? 我正在使用Circe来解析文档。

1 个答案:

答案 0 :(得分:2)

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

java -cp /path/to/spring-boot-fat.jar \
    -Dloader.system=true \
    -Dloader.main=liquibase.integration.commandline.Main \
    org.springframework.boot.loader.PropertiesLauncher \
    --changeLogFile=db/changelog/db-changelog-master.xml \
    --driver=org.h2.Driver \
    --url="jdbc:h2:~/h2db/liquibase-test;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE" \
    --password=sa \
    --username=sa \
    updateSQL

这是阻止API。还有一些API可以从Future或Reactive Programming中以Flux / Monos的形式获取结果,因此您在获取数据方面具有很大的灵活性。

您可以在此处了解如何入门:https://docs.couchbase.com/scala-sdk/1.0alpha/hello-world/start-using-sdk.html

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