使用_id输出将对象插入Mongodb

时间:2013-09-16 01:07:53

标签: mongodb scala casbah

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

期望的行为:

插入文档的

val _id: String = coll.insert(someObj) // _id =“_ id”

1 个答案:

答案 0 :(得分: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)
}