mongo-scala-driver 没有插入
mongo-scala-driver does not insert
我大约有这个数据库包装器 class:
class MyDatabase {
private def getMongoClientSettings(): MongoClientSettings = {
val uri = "mongodb://localhost:27017"
val mongoClientSettings = MongoClientSettings.builder().applyConnectionString(ConnectionString(uri))
.serverApi(ServerApi.builder().version(ServerApiVersion.V1).build())
.build()
mongoClientSettings
}
private val mongoClient = MongoClient(getMongoClientSettings)
private val db = mongoClient.getDatabase("myDatabase")
object groups {
val collection = db.getCollection("groups")
...
}
object posts {
val collection = db.getCollection("posts")
...
}
object likes {
val collection = db.getCollection("likes")
...
}
}
问题是一些插入成功,而其他插入静默失败。
例如,在 groups 对象中,此命令成功:
val doc = Document("_id" -> group.id, "name" -> group.name, "screenName" -> group.screenName,
"membersCount" -> group.membersCount, "lastInspectionDate" -> group.lastInspectionDate)
collection.insertOne(doc)
但是,在 posts 对象中,插入永远不会成功(这里,id 字段不是主键,_id 密钥是自动生成的,与 id):
不同
val doc = Document("id" -> post.id, "fromId" -> post.fromId, "ownerId" -> post.ownerId,
"publishDate" -> post.publishDate, "text" -> post.text, "isPinned" -> post.isPinned)
collection.insertOne(doc)
问题是:为什么对于 posts 集合,插入永远不会成功?
我的想法:
- 也许 db.getCollection 命令在某种程度上取消了其他集合的配置,我需要在 insertOne 命令之前调用 db.getCollection 吗?这是不现实的。
- 本以为insertOne成功前方法就退出了,但是对于groups集合,没有问题
- 我尝试使用此命令执行等待,但仍然没有插入任何帖子:
Await.result(collection.insertOne(doc).toFuture, Duration.Inf)
- 我发现有人提到需要“订阅”observable 以使冷蒸汽开始运行,但我认为这仅与旧版本相关。
配置:
Linux Ubuntu 18.04,Scala 2.12.14,Mongo-Scala-Driver 4.3.1,MongoDB 5.0.2。
期待您的回复。
计算机重新加载并使用 Await.result() 后,一切开始正常工作。不知道为什么。
我大约有这个数据库包装器 class:
class MyDatabase {
private def getMongoClientSettings(): MongoClientSettings = {
val uri = "mongodb://localhost:27017"
val mongoClientSettings = MongoClientSettings.builder().applyConnectionString(ConnectionString(uri))
.serverApi(ServerApi.builder().version(ServerApiVersion.V1).build())
.build()
mongoClientSettings
}
private val mongoClient = MongoClient(getMongoClientSettings)
private val db = mongoClient.getDatabase("myDatabase")
object groups {
val collection = db.getCollection("groups")
...
}
object posts {
val collection = db.getCollection("posts")
...
}
object likes {
val collection = db.getCollection("likes")
...
}
}
问题是一些插入成功,而其他插入静默失败。
例如,在 groups 对象中,此命令成功:
val doc = Document("_id" -> group.id, "name" -> group.name, "screenName" -> group.screenName,
"membersCount" -> group.membersCount, "lastInspectionDate" -> group.lastInspectionDate)
collection.insertOne(doc)
但是,在 posts 对象中,插入永远不会成功(这里,id 字段不是主键,_id 密钥是自动生成的,与 id):
不同val doc = Document("id" -> post.id, "fromId" -> post.fromId, "ownerId" -> post.ownerId,
"publishDate" -> post.publishDate, "text" -> post.text, "isPinned" -> post.isPinned)
collection.insertOne(doc)
问题是:为什么对于 posts 集合,插入永远不会成功?
我的想法:
- 也许 db.getCollection 命令在某种程度上取消了其他集合的配置,我需要在 insertOne 命令之前调用 db.getCollection 吗?这是不现实的。
- 本以为insertOne成功前方法就退出了,但是对于groups集合,没有问题
- 我尝试使用此命令执行等待,但仍然没有插入任何帖子:
Await.result(collection.insertOne(doc).toFuture, Duration.Inf)
- 我发现有人提到需要“订阅”observable 以使冷蒸汽开始运行,但我认为这仅与旧版本相关。
配置: Linux Ubuntu 18.04,Scala 2.12.14,Mongo-Scala-Driver 4.3.1,MongoDB 5.0.2。
期待您的回复。
计算机重新加载并使用 Await.result() 后,一切开始正常工作。不知道为什么。