1

如何将新对象插入 Mongo 并获取_id插入的文档?

期望的行为:

val _id: String = coll.insert(someObj)// _id = 插入文档的“_id”

4

1 回答 1

4

你不必寻找它。当您插入一个新对象时,它的 ID 会在客户端生成,这意味着您在发送之前已经知道它。

从这里:http ://docs.mongodb.org/manual/reference/object-id/

ObjectId 是一个 12 字节的 BSON 类型,使用以下方法构造:

一个 4 字节的值,表示自 Unix 纪元以来的秒数,一个 3 字节的机器标识符,一个 2 字节的进程 ID 和一个 3 字节的计数器,以随机值开头。

因此,当您请求插入新文档时,您将已经指定它。通常你要么使用现有的 ID,要么使用 BSONObjectID.generate 生成一个新的 ID。

这是使用自定义类进行映射的快速草稿(在此示例中,我使用的是 reactivemongo,而不是 casbah):

case class Account(
  id: Option[BSONObjectID],
  firstName: String,
  lastName: String)

然后你在你的作家中做以下事情:

implicit object AccountBSONWriter extends BSONDocumentWriter[Account] {
  def write(account: Account): BSONDocument =
    BSONDocument(
      "_id" -> account.id.getOrElse(BSONObjectID.generate),
      "first_name" -> account.firstName,
      "last_name" -> account.lastName)
}
于 2013-09-16T03:07:32.127 回答