0

我正在编写一个通用更新方法来简化将案例类更改保存到 mongodb。我的模型T特征具有以下功能:

  def update(id: BSONObjectID, t: T)(implicit writer: OFormat[T]): Future[WriteResult] = {
    collection.update(Json.obj("_id" -> id), t)
  }

当我调用它时,它失败并出现以下错误:

Caused by: reactivemongo.api.commands.UpdateWriteResult: 
DatabaseException['The _id field cannot be changed from {_id: ObjectId('4ec58120cd6cad6afc000001')} to {_id: "4ec58120cd6cad6afc000001"}.' (code = 16837)]

这是有道理的,因为 MongoDB 不允许更新文档 ID,即使它的值相同。

我想知道如何从我的案例类实例中删除 _id 以在 mongodb 中更新它。我想我必须在实例转换为 BSON 之前对它进行元组处理,但我不知道该怎么做。这是我的示例案例类:

case class User(
  _id: BSONObjectID,
  email: String
}

谢谢

4

1 回答 1

0

我同意ipoteka。我会使用响应式 mongo 中的 findAndModify 命令。这里有一个示例要点应该有所帮助。

于 2015-07-11T15:21:38.543 回答