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 
} 

感謝

+0

我建議你使用'findAndModify'而不是更新。從案例類中移除字段並使用反射構建新類看起來不太好(也不是線程安全的)。 – ipoteka

+0

您可以提供自定義寫入,而不是輸出該ID。 – cchantep

+0

Mongo具有'upsert'(https://mongodb.github.io/casbah/tutorial.html#update)的概念,它可能適合您的情況。 – mfirry

回答

0

我ipoteka同意。我將使用反應式mongo中的findAndModify命令。有一個例子要求here應該有所幫助。