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 集合,插入永远不会成功?

我的想法:

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

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

期待您的回复。

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