CKAN:在单个查询中删除DataStore中的记录列表

时间:2016-12-19 16:40:48

标签: ckan

注意:我原来的问题是删除除了最后N个以外的所有记录,但是用CKAN API猜测这样的事情是不可能的,我想出了以下解决方案:

  1. 使用total获取datastore_search大量记录。
  2. 获取上一次搜索中first记录的ID。
  3. 获取first记录ID至total-N的所有记录的ID。
  4. 所以,我的问题是:如何在单个查询中删除所有已识别的ID?我尝试了以下内容:

    $ curl -X POST "http://demo.ckan.org/api/3/action/datastore_delete" -d '{"filters":{"_id":1,"_id":2,"_id":3},"force":"true","resource_id":"a43bfb04-7a8b-4624-a06a-25f4165e5b2a"}' -H "Authorization: xxx"
    {"help": "http://demo.ckan.org/api/3/action/help_show?name=datastore_delete", "success": true, "result": {"filters": {"_id": 3}, "resource_id": "a43bfb04-7a8b-4624-a06a-25f4165e5b2a"}}
    

    但只删除了有关最后一个ID(3)的记录。

    当然,阵列也不起作用:

    $ curl -X POST "http://demo.ckan.org/api/3/action/datastore_delete" -d '{"filters":[{"_id":1},{"_id":2},{"_id":3}],"force":"true","resource_id":"a43bfb04-7a8b-4624-a06a-25f4165e5b2a"}' -H "Authorization: xxx"
    {"help": "http://demo.ckan.org/api/3/action/help_show?name=datastore_delete", "success": false, "error": {"__type": "Validation Error", "filters": ["filters must be either a dict or null."]}}
    

    有什么想法吗?或者我应该对每个要删除的记录执行查询吗?

1 个答案:

答案 0 :(得分:2)

自动应答。在尝试了几种组合后,我发现它有效:

$ curl -X POST "http://demo.ckan.org/api/3/action/datastore_delete" -d '{"filters":{"_id":[1,2]},"force":"true","resource_id":"a43bfb04-7a8b-4624-a06a-25f4165e5b2a"}' -H "Authorization: xxx"

即。字典必须分别与_id的单个(键,值)对,_id数组一起发送。