我大约有这个数据库包装类:
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")
...
}
}
问题是一些插入成功,而其他插入静默失败。
例如,在组对象中,此命令成功:
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)
问题是:为什么对于帖子集合,插入永远不会成功?
我的想法:
- 也许 db.getCollection 命令会在某种程度上取消配置其他集合,我需要在 insertOne 命令之前调用 db.getCollection 吗?这是不现实的。
- 我以为insertOne成功之前方法就退出了,但是对于groups集合,没有问题。
- 我尝试使用此命令执行等待,仍然没有插入帖子:
Await.result(collection.insertOne(doc).toFuture, Duration.Inf)
- 我发现一些关于需要“订阅”可观察的内容以使冷蒸汽开始运行的内容,但我认为这仅与旧版本有关。
配置:Linux Ubuntu 18.04、Scala 2.12.14、Mongo-Scala-Driver 4.3.1、MongoDB 5.0.2。
期待您的回复。