1

我大约有这个数据库包装类:

    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)

问题是:为什么对于帖子集合,插入永远不会成功?

我的想法:

  1. 也许 db.getCollection 命令会在某种程度上取消配置其他集合,我需要在 insertOne 命令之前调用 db.getCollection 吗?这是不现实的。
  2. 我以为insertOne成功之前方法就退出了,但是对于groups集合,没有问题。
  3. 我尝试使用此命令执行等待,仍然没有插入帖子:Await.result(collection.insertOne(doc).toFuture, Duration.Inf)
  4. 我发现一些关于需要“订阅”可观察的内容以使冷蒸汽开始运行的内容,但我认为这仅与旧版本有关。

配置:Linux Ubuntu 18.04、Scala 2.12.14、Mongo-Scala-Driver 4.3.1、MongoDB 5.0.2。

期待您的回复。

4

1 回答 1

1

计算机重新加载并使用 Await.result() 后,一切都开始工作了。不知道为什么。

于 2021-09-02T06:08:37.877 回答