Вложенная структура запроса CosmosDB JSON

Я использую CosmosDB SQLAPI для одного из наших приложений. Я запрашиваю с помощью службы хранилища Azure Explore. Структура JSON, которую мне трудно запросить.

{
    "countyid": 0,
    "data": [
        [
            {
                "Elements": [
                    {
                        "ID": 11,
                        "V": false,
                        "R": false
                    },
                    {
                        "ID": 16,
                        "V": false,
                        "R": false
                    },
                    {
                        "ID": 3,
                        "V": false,
                        "R": false
                    },
                    {
                        "ID": 5,
                        "V": false,
                        "R": false
                    }
                ]
            },
            {
                "Elements": [
                    {
                        "ID": 486,
                        "V": false,
                        "R": false
                    },
                    {
                        "ID": 492,
                        "V": false,
                        "R": false
                    }
                ]
            }
        ]
    ]
}

Мне нужно получить Elements [0] ID = 3,5,11,16 и Elements 2 ID = 486 492

CosmosDB Запрос окна редактирования JSON

Окно обозревателя хранилищ Azure пытается запросить

Запрос работает без условия where


person RSimple    schedule 09.05.2019    source источник
comment
Не знаю, в чем ваша реальная потребность. I need to get Elements[0] ID = 3,5,11,16 and Elements[1] ID = 486,492. Вы хотите отфильтровать данные по этому условию? Какова окончательная структура данных?   -  person Jay Gong    schedule 10.05.2019
comment
Я предполагаю, что вы хотите запросить первый элемент массива данных, содержащий 3,5,11,16 ID, в то время как второй массив элементов данных содержит 486 492 ID. Я прав?   -  person Jay Gong    schedule 10.05.2019
comment
Что-то похожее на SQL: SELECT c.data.Elements, c.data.Elements.Id FROM c WHERE c.id in ('8a04fc64-904b-4530-98e8-914e951c0cbc') ORDER BY c._ts DESC. Окончательный результат, которого я ожидаю, будет примерно таким. Элементы [0] 3 Элементы [0] 5 Элементы [0] 6 Элементы [0] 11 Элементы [1] 486 Элементы [1] 492 Да, я хочу выбрать идентификаторы массива для каждого массива элементов.   -  person RSimple    schedule 10.05.2019
comment
Все еще запуталась ... Что такое Elements[0] 3 Elements[0] 5 Elements[0] 6 Elements[0] 11 Elements[1] 486 Elements[1] 492 ? Результат ничего не фильтрует.   -  person Jay Gong    schedule 10.05.2019


Ответы (2)


SQL

select value array(select value z.ID from z in a.Elements)
from c
join b in c.data
join a in b

Результат

[
    [
        11,
        16,
        3,
        5
    ],
    [
        486,
        492
    ]
]
person tiwahu    schedule 12.05.2019
comment
Потрясающе, тиваху, я получаю идентификаторы, как вы указали в запросе. Но если я поставлю WHERE c.countyid = 0, он вернется пустым. Не могли бы вы помочь и с этим. - person RSimple; 13.05.2019

Вам нужно использовать соединение при запросе данных вложенного массива, попробуйте этот sql:

SELECT distinct c.data  from c
join elem1 in c.data[0].Elements
join elem2 in c.data[1].Elements
where elem1.ID in(3,5,6,11) and elem2.ID in (486,492)
person Jay Gong    schedule 10.05.2019
comment
Джей, если вы видите эти данные JSON: [[{Элементы ..... Значение после поля данных у нас есть две квадратные скобки, затем фигурные скобки, а затем элементы внутри этой структуры. Я пробовал что-то вроде Select c.data ... Elements, которое не поддерживается в запросах CosmosDB. Первое, что у меня даже не работает, - это вложенный запрос на получение элементов. Предоставленный запрос не возвращается. - person RSimple; 10.05.2019