希望在使用insertOne
时得到刚才插入的文件ObjectId
。
根据我的考虑,一种方法是在客户端生成_id,另一种方法是通过文档的指定字段进行查询。哪种方法更好或有其他方法?
ps:我知道mongo中的ObjectId是用机器和时间信息生成的。
总之,我只是想知道mongo ObjectId should generate on client or mongod server 是什么意思?
最佳答案
正如 MongoDB 文档所指定的,如果您使用可变文档,如果您没有提供由 MongoDB 自动创建的带有 _id 的文档,您应该取回该文档。
Insert MongoDB -> See warning part
如您所知,在 Scala 中,我们默认情况下大部分时间都在使用不可变对象(immutable对象)。这是一件好事,因为您避免了副作用导致的失败。
例如,如果你连接两个列表,你将得到一个新的List,当你插入一个键时,Map也是如此,返回一个新的Map。与 Java 等其他语言相反,您将只有一个对象(指针)可以更改其内部状态。
所以如果你使用Mongo的不可变文档:
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"...)
关于mongodb - mongo scala驱动程序在使用insertOne后得到_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37370277/