Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb $addToSet实现,用于根据修补程序请求进行阵列更新_Mongodb_Spring Data_Spring Data Rest_Spring Hateoas - Fatal编程技术网

Mongodb $addToSet实现,用于根据修补程序请求进行阵列更新

Mongodb $addToSet实现,用于根据修补程序请求进行阵列更新,mongodb,spring-data,spring-data-rest,spring-hateoas,Mongodb,Spring Data,Spring Data Rest,Spring Hateoas,在补丁请求期间更新数组值时,是否有方法告诉MongoRepository实现$addToSet 我将SpringDataREST与HATEOAS和Mongodb一起使用,当前的实现将旧阵列替换为新阵列,其中所需的功能是执行两个阵列的并集,并将该阵列存储在Mongodb文档中 虽然通过定制实现应该可以做到这一点,但是Spring不会为实现生成RESTURL,因此需要大量的样板文件来满足一个相当小的需求。感谢所有回复 SpringDataREST构建在域对象和存储库抽象之上。因此,让它与特定于商店的

在补丁请求期间更新数组值时,是否有方法告诉MongoRepository实现$addToSet

我将SpringDataREST与HATEOAS和Mongodb一起使用,当前的实现将旧阵列替换为新阵列,其中所需的功能是执行两个阵列的并集,并将该阵列存储在Mongodb文档中


虽然通过定制实现应该可以做到这一点,但是Spring不会为实现生成RESTURL,因此需要大量的样板文件来满足一个相当小的需求。感谢所有回复

SpringDataREST构建在域对象和存储库抽象之上。因此,让它与特定于商店的实现一起工作超出了它的范围。我假设您的核心目标是对域实例应用补丁请求,而
$addToSet
正是实现这一目标的方法

由于SpringDataREST的2.2M1版本,我们支持on-PATCH请求。因此,您可以将以下文档发送到服务器:

[{ "op": "add", "path": "/a/b/c", "value": [ "foo", "bar" ] }]
假设
c
是您试图操作的数组,这将向其中添加
foo
bar


另一个更激进的选择是实际部署一个手动实现的控制器,并将其挂接到URI空间中的正确位置,以手动与存储库交互。

@Olivier gierke感谢您的回复!我看maven上没有2.2M1可用。最新版本是2.1.1.0版本,在此版本中,服务器在发送类似文档时抛出405。事实上,在您回复之前,我试图实现一个解决方案,将类似的文档发送到服务器,并在拦截器中使用preHandle来处理它。在2.2 M1可用之前,您认为这是一个可行的解决方案吗?谢谢“里程碑”可从网站获得。@Olivier gierke收到了,谢谢!但是,在使用curl将文档发送到服务器时,我仍然得到了405分:
curl-I-X PATCH-H“Content-Type:application/json”-d'{“op”:“add”,“path”:“/rementer/53c84d00b0b02ec66a1E328ccf/sendeeids”,“value”:[“dontreplace”]}http://localhost:8080/
唯一可行的动词似乎是GET、HEAD和OPTIONS。我在这里做错了什么吗?您需要发送的媒体类型是
application/json patch+json
@Olivier gierke,但它仍然给出了相同的错误。然后,我对文档和资源做了一些更改,如下curl:
curl-I-X PATCH-H“Content Type:application/json PATCH+json”-d'{“op”:“add”,“path”:“/sendeeids”,“value”:[“dontreplace”]}http://localhost:8080/reminder/53c84d00b02ec66a1e328ccf
。现在,它没有给出405,但请求不正确,说它无法读取用于定义
引用的资源的pojo对象(com.company.prod.pojo.rementer)http://localhost:8080/reminder/53c84d00b02ec66a1e328ccf
在卷曲请求中。有关于这方面的例子/教程吗?