Поиск документа с использованием содержимого массива, не работающего в Cosmos - PullRequest
1 голос
/ 20 апреля 2020

У меня есть структура ниже

Я пытаюсь найти элемент, используя ARRAY_CONTAINS

Я хочу найти элементы, передавая Guid и ища его в массиве компаний - ищет в свойстве companyId объекта в массиве

Затем мне нужно вернуть itemName

{
    "itemName": "An Item",
    "companies": [
        {
            "companyId": "6fdc235e-69b7-42f9-9917-79411754fef0",
            "companyName": "Test"
        }
    ]
}

Я пробовал комбинации, но ни одна из них не работает?

SELECT * FROM c WHERE c.companies.companyId = '6fdc235e-69b7-42f9-9917-79411754fef0'
SELECT * FROM c WHERE ARRAY_CONTAINS(c.companies, '6fdc235e-69b7-42f9-9917-79411754fef0')
SELECT * FROM c WHERE ARRAY_CONTAINS(c.companies.companyId, '6fdc235e-69b7-42f9-9917-79411754fef0')

I здесь нужно использовать лучший метод эффективности, так как для поиска будет 32000 элементов

Список компаний не будет огромным, может быть максимум 10 или около того

Что я делаю не так?

Пол

1 Ответ

0 голосов
/ 20 апреля 2020

Вы храните JSON документы в вашем массиве, поэтому вам нужно искать свойство speci c сохраняемых вами объектов. Что-то вроде:

SELECT *
FROM c
WHERE ARRAY_CONTAINS(c.companies, {'companyId':'6fdc235e-69b7-42f9-9917-79411754fef0'},true)

Вы упомянули, что нуждаетесь только в itemName, поэтому вы можете оптимизировать как:

SELECT c.itemName
FROM c
WHERE ARRAY_CONTAINS(c.companies, {'companyId':'6fdc235e-69b7-42f9-9917-79411754fef0'},true)

Третий параметр, установленный на true, допускает частичное совпадение, когда поиск объектов в массивах.

...