如何将新对象插入Mongo并使用插入的文档获取_id
?
期望的行为:
插入文档的 val _id: String = coll.insert(someObj)
// _id =“_ id”
答案 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)
}