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

#javascript #json #marklogic #mlcp #marklogic-corb

Вопрос:

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

Ответ №1:

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

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

Кроме того, если вы хотите найти binary() документы, вы можете применить format-binary опцию к a cts.search() с помощью a 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 вместо 1.json

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