我的任务是创建扩展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),我需要更新它,如果更新数据的类型是保存为列表我需要附加它。
在这种情况下你会建议什么?
答案 0 :(得分:0)
您需要能够确定是否执行$set
或$push
,因此似乎有三种选择。
更新消息传递子系统以包含操作员。
这可能不太可行..
发出findAndModify $push
。
如果它不是数组,则会失败:
无法将$ push / $ pushAll修饰符应用于非数组
重新发布$set
感觉像是黑客但会工作
执行返回文档并检查它的查询,然后在更新查询中发出正确的运算符。
应用程序中需要更多代码