Как отфильтровать не-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 of
1.json`
Трудно диагностировать и устранять неполадки, не видя, каковы ваши конфигурации заданий MLCP, и не зная больше о том, что вы делаете для загрузки данных.