DocumentDb - запрос по вложенному документу и корневому уровню

Оповестить меня | Редактировать | Удалить | Изменить тип Вопрос Вы не можете голосовать за собственное сообщение 0 Привет!

Предположим, у меня есть документы следующим образом:

{
  id: 123,
  tags: [ { name: "something" } ]
}

и я хочу запросить все документы, которые содержат тег с именем = "search" ИЛИ имеют идентификатор = 9000. Я тестировал на детской площадке (https://www.documentdb.com/sql/demo) что-то вроде :

SELECT food.id, food.description, food.tags
FROM food
JOIN tag IN food.tags
WHERE food.id = "09052" or tag.name="blueberries"

но затем я получаю кучу повторяющихся записей, каждый документ из food - это умноженное на количество тегов в этом документе.

Как получить четкие результаты при фильтрации вложенных коллекций и корневых свойств?


person alek kowalczyk    schedule 24.06.2015    source источник


Ответы (1)


Возможно, вам понадобится встроенная функция ARRAY_CONTAINS. См. https://msdn.microsoft.com/library/azure/dn782250.aspx#bk_array_functions, чтобы получить подробную информацию, например, примерно так:

SELECT food.id, food.description, food.tags
FROM food
WHERE food.id = "09052" or ARRAY_CONTAINS(food.tags, { "name": "blueberries" })

Вы можете протестировать этот запрос в Query Playground здесь.

Обратите внимание, что функция не использует индекс, поэтому в идеале вы должны использовать его, когда в запросе есть другой фильтр. В противном случае единственный способ сделать это - использовать запрос, который у вас был ранее, а затем выполнить «отдельный» запрос на стороне клиента.

person Aravind Krishna R.    schedule 24.06.2015