mongodb - mongo scala驱动程序在使用insertOne后得到_id

标签 mongodb scala objectid

希望在使用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/

相关文章:

mongodb - 为什么 mgo 不能正确解码我的结构?

node.js - mongoose在查询时降低内存使用的方法

mongodb - Mongo 查询嵌入对象属性的存在和值

scala - 将变量从 Scala 中的存在类型 TypeCast 转换为运行时类型

regex - 在mongo中执行优先级查询

Scala Play 2.5 对象 ws 不是包 play.api.libs 的成员

scala - 如何在scala中使用相对路径读取文本文件

javascript - 如何在 mongodb 中创建自定义 objectID

mongodb - 从包含引用的字段获取数据

go - mgo 将 bson.objectId 转换为 html 模板中的字符串(十六进制)