2017-12-17 4 views
0

私は最近、私のMongoDBでそのフィールドの追跡を開始したいので、私のスカラーケースクラスに新しいフィールドを追加します。ReactiveMongo新しいフィールドが追加された後にMacros.handlerがクラッシュする

のはケースクラスは、このようなものです言わせて:

case class MyItem (
    var existingField: String, 
    var newlyAddedField: String 
) { 

} 

私は私のオブジェクトにJSONとBSONをデシリアライズ/シリアライズするためにこれを使用します。

object MyItem { 
    import play.api.libs.json.Json 

    // generate reader and writer: 
    implicit var jsonFormats = Json.format[MyItem] 
    implicit var bsonFormats = Macros.handler[MyItem] 
} 

私のDB内のすべての既存のデータが」doesnのとおりトンnewlyAddedFieldを持って、私は

reactivemongo.bson.exceptions.DocumentKeyNotFound: The key 'newlyAddedField' could not be found in this document or array 

ランタイム例外を取得誰もが助けてもらえますか?私は独自のシリアライゼーション/デシリアライズを書いたことがありますが、私はPlay Frameworkを使用しているので、どのように行うべきかわかりません。その構文と方法はバージョンによって異なります。私はフィールドを追加することがNoSQL dbで一般的でなければならないので、より簡単な方法があることを願っています。 Btw、私はプレイフレームワーク2.5を使用しています

ありがとうございます!

+0

「新しく​​追加されたフィールド」がない場合は、ReactiveMongoに固有ではなく、 'null'ではなく' Option'として表現されなければなりません。 – cchantep

答えて

1

AFAIU it Macros.handlernullです。つまり、フィールドがない場合は値をnullに設定しません。私は、スカラで最もシンプルでクリーンな修正は、あなたの新しいフィールドをOption[String]と宣言することだと思います。だから、誰も(マクロコードジェネレータを含む)このフィールドがないかもしれないことがわかります。そして、これはなにかと思われるthe doc suggests

関連する問題