findAndUpdate MongoDBRepository - PullRequest
       10

findAndUpdate MongoDBRepository

0 голосов
/ 10 февраля 2012

Моя задача заключается в создании репозитория, расширяющего MongoDBRepository, который позволяет мне определять вид метода findAndUpdate. 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), мне нужно обновить его, если данные обновления имеют тип, который сохраняется в виде списка, мне нужно добавить его.

Что бы вы предложили в этом случае?

1 Ответ

0 голосов
/ 10 февраля 2012

Вы должны быть в состоянии определить, следует ли делать $set или $push, поэтому существует три варианта выбора.

  1. Обновите подсистему обмена сообщениями, включив в нееОператор.

    Это может быть неосуществимо ..

  2. Введите findAndModify с $push.

    Это не удастся, если это не массив:

    Невозможно применить модификатор $ push / $ pushAll к не массиву

    Так что снова введите $set

    Похоже на хак, но будет работать

  3. Выполнить запрос, который возвращает документ и проверить его, а затем ввести правильный оператор в запросе на обновление.

    Требуется больше кода в приложении

...