0

私の仕事は、種類の findAndUpdate メソッドを定義できるようにする MongoDBRepository を拡張するリポジトリを作成することです。MongoOps とテンプレート アプローチは許可されていません。これは私のMongoDocumentがどのように見えるかです:

{"_id":"somedocumentId","attributetype1":{"class":"type1","value":"somevalue"}, 
             "attributetype2":{"class":"type2","value":"somevalue"},
             "attributetype3":{{"class":"type2","value":"somevalue"},{"class":"type2","value":"somevalue"},...,}

ご覧のとおり、一部の属性は単なるクラス値ですが、他の属性はリストです。メッセージング サブシステムから受け取った更新要求は次のとおりです。

{"documentId":"somedocumentIdValue","updatedata":{"class":"typeX","value":"somevalue"}

要求データのタイプが単なるクラス値 (attributetype1 や 2 など) の場合は、それを更新する必要があります。更新データがリストとして保存されるタイプの場合は、追加する必要があります。

この場合、あなたは何を提案しますか?

4

1 に答える 1

0

$setaかaかを判断できる必要がある$pushので、選択肢は3つあるようです。

  1. メッセージング サブシステムを更新して、オペレーターを含めます。

    これは実現不可能かもしれません..

  2. を使用してfindAndModifyを発行し$pushます。

    配列でない場合、これは失敗します。

    非配列に $push/$pushAll 修飾子を適用できません

    そのため、$set

    ハックのように感じますが、動作します

  3. ドキュメントを返すクエリを実行して検査し、更新クエリで正しい演算子を発行します。

    アプリケーションで追加のコードが必要

于 2012-02-10T08:56:47.090 に答える