我希望获得刚刚插入使用ObjectId
的文档insertOne
根据我的考虑,一种方法是在客户端生成_id,另一种方法是通过指定字段与文档进行查询。哪种方法更好或有其他方法?
ps:我知道mongo中的ObjectId会产生机器和时间信息
总之,我只是想知道mongo ObjectId应该在客户端或mongod服务器上生成的意思吗?
答案 0 :(得分:1)
正如MongoDB文档所指定的那样,如果您使用Mutable Document,如果您还没有提供,则应该自动使用MongoDB创建的_id返回Document。
Insert MongoDB -> See warning part
正如您在Scala中所知,大多数情况下我们默认使用不可变对象。这是一个很好的,因为你可以避免副作用导致的失败。
例如,如果连接两个列表,您将获得一个新的List,当插入一个键时,Map会发生同样的情况,返回一个新的Map。作为Java中其他语言的opossite,你只有一个会改变其内部状态的对象(一个指针)。
因此,如果您使用Mongo的inmutable文档:
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)...
"文档"是不可改变的(所以你不会让Mongo自动生成_id)。
但是如果你使用:
val doc: Document = Document("_id" -> ObjectId(), "name" -> "MongoDB"...)
插入后,您将在" doc"中找到_id字段。文献
正如你所说的其他方式是使用类似的东西提供ObjectId:
{{1}}