Как отфильтровать не-json-документы в MarkLogic?

У меня есть много данных, загруженных в мою базу данных, где некоторые из загруженных документов не являются файлами JSON, а просто двоичными файлами. Правильные данные выглядят так: «/foo/bar/1.json», но неправильные данные имеют формат «/ foo / bar / *». Есть ли в MarkLogic механизм, использующий JavaScript, где я могу отфильтровать эти нежелательные данные и удалить их?PS: Я не могу извлечь файлы с помощью mlcp, у которых есть "?" в URI и, возможно, когда я пытаюсь перезагрузить эти данные, я получаю эту ошибку. Есть ли способ исправить этот отрывок вместе с этим?

1 ответ

Если все URI документа содержат ? и находятся в этом каталоге, тогда вы можете использовать cts.uriMatch()

      declareUpdate();
for (const uri of cts.uriMatch('/foo/bar/*?*') ) {
  xdmp.documentDelete(uri)  
}

В качестве альтернативы, если вы хотите найти binary() документы, вы можете подать заявку format-binary вариант для cts.search() с cts.directoryQuery() а затем удалите их.

      declareUpdate();
for (const doc of cts.search(cts.directoryQuery("/foo/bar/"), ['format-json']) ) {
  xdmp.documentDelete(fn.baseUri(doc));
}

Вероятно, они сохраняются как двоичные, потому что нет расширения файла, когда URI заканчивается вопросительным знаком и некоторыми значениями параметров строки запроса, например "1.json? Foo = bar" instead of1.json`

Трудно диагностировать и устранять неполадки, не видя, каковы ваши конфигурации заданий MLCP, и не зная больше о том, что вы делаете для загрузки данных.

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