0
我在寫一個通用更新方法來簡化將案例類更改保存到mongodb。我的模型T
特點有以下功能:存儲到MongoDB之前刪除案例類字段
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
}
感謝
我建議你使用'findAndModify'而不是更新。從案例類中移除字段並使用反射構建新類看起來不太好(也不是線程安全的)。 – ipoteka
您可以提供自定義寫入,而不是輸出該ID。 – cchantep
Mongo具有'upsert'(https://mongodb.github.io/casbah/tutorial.html#update)的概念,它可能適合您的情況。 – mfirry