CKAN: удалить список записей в хранилище данных в одном запросе

ПРИМЕЧАНИЕ. Моя первоначальная проблема - удалить все записи, кроме последней. N из них, но угадать такое невозможно с CKAN API, я пришел к следующему решению:

  1. Чтобы получить total количество записей, использующих datastore_search,
  2. Чтобы получить идентификатор first запись в предыдущем поиске.
  3. Чтобы получить идентификаторы всех записей из first ID записи для total-N,

Итак, мой вопрос: как удалить все идентифицированные идентификаторы в одном запросе? Я пробовал следующее:

$ 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"}}

Но только запись относительно последнего идентификатора (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 ответ

Решение

Авто-ответ. Попробовав несколько комбинаций, я обнаружил, что это работает:

$ 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соответственно.

Другие вопросы по тегам