Mongodb mongo scala驱动程序在使用insertOne后获得_id

Mongodb mongo scala驱动程序在使用insertOne后获得_id,mongodb,scala,objectid,Mongodb,Scala,Objectid,我希望得到刚才插入的文档ObjectId,该文档正在使用insertOne 在我看来,一种方法是在客户端生成yId,另一种方式是用指定的字段查询文档。哪种方法更好或有其他方法? ps:我知道mongo中的ObjectId使用机器和时间信息生成。 总之,我只是想知道mongo ObjectId应该在客户端或mongod服务器上生成这句话的意思是什么?正如MongoDB文档所指定的,如果您使用可变文档,那么如果您没有提供,您应该使用MongoDB创建的_id自动取回文档 正如您所知,在Scala中

我希望得到刚才插入的文档
ObjectId
,该文档正在使用
insertOne

在我看来,一种方法是在客户端生成yId,另一种方式是用指定的字段查询文档。哪种方法更好或有其他方法?
ps:我知道mongo中的ObjectId使用机器和时间信息生成。

总之,我只是想知道mongo ObjectId应该在客户端或mongod服务器上生成这句话的意思是什么?

正如MongoDB文档所指定的,如果您使用可变文档,那么如果您没有提供,您应该使用MongoDB创建的_id自动取回文档

正如您所知,在Scala中,默认情况下,我们大部分时间都在处理不可变对象。这是一个好方法,因为可以避免由副作用导致的故障

例如,如果将两个列表连接起来,将获得一个新列表,并且在插入键时映射也会发生同样的情况,将返回一个新映射。作为Java等其他语言中的opossite,您只有一个对象(指针)可以更改其内部状态

因此,如果您使用Mongo的inmmutable文档:

val doc: org.mongodb.scala.bson.collection.immutable.Document = Document("name" -> "MongoDB", "type" -> "database",
                             "count" -> 1, "info" -> Document("x" -> 203, "y" -> 102))

collection.insertOne(doc)...
“doc”将是不可更改的(因此您不会有Mongo自动生成的_id)

但如果您使用:

val doc: org.mongodb.scala.bson.collection.mutable.Document = Document("name" -> "MongoDB", "type" -> "database",
                             "count" -> 1, "info" -> Document("x" -> 203, "y" -> 102))

collection.insertOne(doc)...
插入后,您的“doc”文档中将有_id字段

正如您所说的,另一种方法是始终使用如下内容提供ObjectId:

val doc: Document = Document("_id" -> ObjectId(), "name" -> "MongoDB"...)

如何将mutable.Document与insertOne方法一起使用?注意插入在新驱动程序中是异步的,因此您必须订阅可观察的,或者将其转换为未来并处理它…为什么collection.insertOne()方法不将可变文档作为scala驱动程序1.1.1中的参数使用?