使用insertOne后,mongo scala驱动程序获取_id

时间:2016-05-22 03:38:05

标签: mongodb scala objectid

我希望获得刚刚插入使用ObjectId的文档insertOne 根据我的考虑,一种方法是在客户端生成_id,另一种方法是通过指定字段与文档进行查询。哪种方法更好或有其他方法?
ps:我知道mongo中的ObjectId会产生机器和时间信息 总之,我只是想知道mongo ObjectId应该在客户端或mongod服务器上生成的意思吗?

1 个答案:

答案 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}}