Запрос элементов в словаре в документе CosmosDB - PullRequest
0 голосов
/ 25 сентября 2018

В моей базе данных CosmosDB есть такие документы:

{
    "id": "12345",
    "filename": "foo.txt",
    "versions": {
        "1": {
            "storageAccount": "blob123",
            "size": 33
        },
        "2": {
            "storageAccount": "blob123",
            "size": 42
        }
    }
}

(это упрощенный образец)

Мне нужно запросить свойство "storageAccount", чтобы проверить, есть лифайлы хранятся в данной учетной записи хранения.Но я не могу найти способ выразить «для каждой версии».

Я пробовал это, но, конечно, это не работает

select top 1 *
from c
join v in c.versions
where v.storageAccount = 'blob123'

Видимо JOIN работает только намассивы, а не словари.Есть ли способ запроса элементов в словаре?

В качестве обходного пути я могу использовать UDF, но производительность и стоимость ужасны (1200 RU для всего 2000 документов, когда нет соответствующего документа ...)

РЕДАКТИРОВАТЬ: обновлено, чтобы более точно отразить фактический вариант использования

1 Ответ

0 голосов
/ 26 сентября 2018

К сожалению, сегодня это невозможно.Вы не можете перебирать ключи объекта в SQL Космоса.

Я бы рекомендовал изменить схему на что-то вроде:

{
    "id": "12345",
    "filename": "foo.txt",
    "versions": [
        {
            "id": "1"
            "storageAccount": "blob123",
            "size": 33
        },
        {
            "id": "2"
            "storageAccount": "blob123",
            "size": 42
        }
    ]
}

Кроме того, вы можете оценить пользовательскую функцию, которая будет возвращать ключи объекта для вас, но это увеличитВаш RU стоит, хотя, возможно, меньше, чем sprocs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...