0

我的任务是创建扩展 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"}

如果请求数据的类型只是一个类值(如属性类型 1 和 2)我需要更新它,如果更新数据是另存为列表的类型,我需要附加它。

在这种情况下,您有什么建议?

4

1 回答 1

0

您需要能够确定是否执行 a$set或 a$push所以似乎有三个选择。

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

    这可能不可行。。

  2. 发出带有$push. _

    如果它不是数组,这将失败:

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

    所以重新发行一个$set

    感觉像一个黑客,但会工作

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

    应用程序中需要更多代码

于 2012-02-10T08:56:47.090 回答