首页 > 解决方案 > clusterSettings 不是 com.mongodb.MongoClientSettings.Builder 的成员

问题描述

我正在尝试使用来自 scala 的 mongodb 客户端。我使用 IntelliJ IDEA。

在这一行:

val settings: MongoClientSettings = MongoClientSettings
                                             .builder()
                                             .clusterSettings(clusterSettings)
                                             .build()

我得到错误:

clusterSettings 不是 com.mongodb.MongoClientSettings.Builder 的成员

尽管依赖项和导入似乎是正确的。

这是sbt文件:

scalaVersion := "2.11.12"
libraryDependencies += "org.mongodb.scala" %% "mongo-scala-driver" % "2.3.0"
libraryDependencies += "org.mongodb" % "mongodb-driver-core" % "3.7.0"

这里包括:

import com.mongodb.ServerAddress
import org.mongodb.scala.MongoClientSettings
import org.mongodb.scala.connection.ClusterSettings

似乎没有人在互联网上遇到这个问题,但我的同事最近也遇到了同样的问题。任何想法这里有什么问题?

更新:

根据罗斯的评论,我修改了 sbt:

scalaVersion := "2.11.12"
libraryDependencies += "org.mongodb.scala" %% "mongo-scala-driver" % "2.3.0"

并修改代码:

import com.mongodb.connection.ClusterSettings
import org.mongodb.scala.MongoClientSettings

val settings: MongoClientSettings = MongoClientSettings
  .builder()
  .applyToClusterSettings((b: ClusterSettings.Builder) => b.applySettings(clusterSettings))
  .build()

现在 IDEA 不会抱怨,它会看到所有 API,但在编译过程中出现错误:

错误:(9, 60) 类型不匹配;找到:com.mongodb.connection.ClusterSettings.Builder => com.mongodb.connection.ClusterSettings.Builder 需要:com.mongodb.Block[com.mongodb.connection.ClusterSettings.Builder] .applyToClusterSettings((b: ClusterSettings.Builder) => b.applySettings(clusterSettings))

但是如果我在外面定义块然后使用它 - 它编译成功:

 val block: Block[ClusterSettings.Builder] = new Block[ClusterSettings.Builder] {
  override def apply(t: ClusterSettings.Builder): Unit = {
    t.applySettings(clusterSettings)
  }
}

val settings: MongoClientSettings = MongoClientSettings
  .builder()
  .applyToClusterSettings(block)
  .build()

可能是什么原因?

标签: mongodbscalasbt

解决方案


2.3.0 for 中的类型别名发生了变化,MongoClientSettings并且与以前的构建器的 API 略有不同。请参阅升级指南: http: //mongodb.github.io/mongo-scala-driver/2.3/upgrade/#mongoclientsettings

之所以更改它,是因为它已com.mongodb.async.client.MongoClientSettings被弃用,取而代之的是新的集中式MongoClientSettings.

您现在仍然可以使用已弃用的设置。更新(刷新)您的 sbt 项目和 intellij 将突出显示clusterSettings构建器上缺少方法。

将设置应用于新的示例MongoClientSettings

import com.mongodb.connection.ClusterSettings

// Scala 2.12 (support for Single Abstract Methods)
val clientSettings: MongoClientSettings = MongoClientSettings
      .builder()
      .applyToClusterSettings((b: ClusterSettings.Builder) => b.applySettings(clusterSettings))
      .build()

// Scala 2.11 you must provide the block:
val clientSettings: MongoClientSettings = MongoClientSettings
      .builder()
      .applyToClusterSettings(new Block[ClusterSettings.Builder]() {
        override def apply(b: ClusterSettings.Builder): Unit = b.applySettings(clusterSettings)
      })
      .build()

推荐阅读