如何通过REST接口的PATCH请求删除文档中的指定集合?
问题解决思路
1. 修正URL参数格式错误
你的curl命令里URL参数的分隔符使用错误:
"http://myserver.example.com/v1/documents?uri=/path/to/file.xml?category=metadata"
这里第二个?必须换成&——URL中第一个?用于分隔路径和参数,后续参数之间只能用&连接。原写法会让category=metadata被解析为uri的一部分,服务器无法识别你要修改文档的metadata,这是返回204但无实际效果的核心原因之一。修正后的URL应为:
"http://myserver.example.com/v1/documents?uri=/path/to/file.xml&category=metadata"
2. 修正PATCH请求的Payload
原Payload的写法不符合MarkLogic REST API的PATCH规范,有两种正确的删除集合方式:
方式一:使用专用的<rapi:remove-collection>操作
这是MarkLogic提供的更直接的删除集合方式,无需定位XML节点:
<rapi:patch xmlns:rapi="http://marklogic.com/rest-api"> <rapi:remove-collection>http://example.com/somecollection</rapi:remove-collection> </rapi:patch>
方式二:精准定位并删除目标<rapi:collection>节点
如果要保留XML节点操作的方式,需要精准定位到要删除的单个集合节点,而非父节点:
<rapi:patch xmlns:rapi="http://marklogic.com/rest-api"> <rapi:delete select="/rapi:metadata/rapi:collections/rapi:collection[.='http://example.com/somecollection']"/> </rapi:patch>
原Payload中select="/rapi:metadata/rapi:collections"指向所有集合的父节点,搭配子元素的写法无法正确匹配到单个目标集合,因此不会生效。
3. 验证操作
完成上述两处修正后重新执行curl命令,即可正确删除目标集合。
内容的提问来源于stack exchange,提问作者eaolson
相关产品推荐
相关产品推荐

