mongodb - 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()
可能是什么原因?
解决方案
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()
推荐阅读
- node.js - node.js 拒绝连接?
- python - TensorFlow in_top_kv
- c# - C# Datagridview 时间戳(周一至周五)和(上午 8 点 - 下午 3 点)
- javascript - google Places Autocomplete 下拉菜单未使用 ionic3 在 iOS9 中触发“place_changed”事件
- javascript - BFS 树遍历
- python - 如果行长度较小而不使用 pandas 或 numpy,则在 python 中删除矩阵中的行
- ethereum - Solidity : 将字符串数组、键值对或对象作为参数提交给函数
- python - Azure - Python - 从命令行解析参数
- python - 在这个 Keras word2vec 实现中如何执行余弦相似度?
- blogger - 您如何使单个帖子标题位于博客标题之前?