Поиск частичных фрагментов с глубоко вложенным деревом

#azure-cosmosdb

#azure-cosmosdb

Вопрос:

я ищу способ фильтрации документов с использованием «фрагментов пути фильтрации» (за неимением лучшего слова). У меня глубоко вложенная и рекурсивная структура JSON, и я не хочу писать чудовищный запрос.

Запрос должен выглядеть примерно так

 WHERE start_prop.next_prop.[here comes lots of different props which I want to "ignore"].next_inner_prop.[again stuff to ignore].final_prop = "Foo"
 

Может быть, «игнорировать» здесь неправильный термин, это больше, чем то [] , что должно выражать: «да, что бы здесь ни было».

или, альтернативно, что-то вроде этого

 WHERE start_prop.next_prop.**.next_inner_prop.*.final_prop = "Foo"
 

Я надеюсь, что мой вопрос имеет смысл.

Спасибо

Комментарии:

1. По определению, я думаю, вам придется отказаться от любой индексации, поскольку индексы строятся на основе полного пути к значению, и это звучит так, как будто у вас нет известного пути для предоставления. Если это так, то не было бы никакой эффективности в запросе на стороне Cosmos по сравнению с захватом всего набора данных целиком и фильтрацией в клиентском коде.

Ответ №1:

Это не поддерживается. Как сказал Ноа, индексы строятся из полного пути к значению, и у вас нет известного пути. Также механизм запросов Cosmos не поддерживает * ключевое слово. Так что этот SQL не может работать WHERE start_prop.next_prop.**.next_inner_prop.*.final_prop = "Foo" . Вам нужно обработать это на стороне клиента.