findoneAndUpdate MongoDB存储库

时间:2012-02-09 21:58:57

标签: json mongodb rabbitmq ddd-repositories spring-data

我的任务是创建扩展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 :(得分:0)

您需要能够确定是否执行$set$push,因此似乎有三种选择。

  1. 更新消息传递子系统以包含操作员。

    这可能不太可行..

  2. 发出findAndModify $push

    如果它不是数组,则会失败:

      

    无法将$ push / $ pushAll修饰符应用于非数组

    重新发布$set

    感觉像是黑客但会工作

  3. 执行返回文档并检查它的查询,然后在更新查询中发出正确的运算符。

    应用程序中需要更多代码