Функция Azure обновляет SQL-массив CosmosDB в документе - PullRequest
0 голосов
/ 23 октября 2019

Я использую функции Azure и Cosmos DB SQL для создания приложения без сервера с javascript.

У меня есть следующая схема базы данных элемента user:

{
    "id": "user_id_2",
    "username": "username_2",
    "pass": "pass_1",
    "feed": [],
    "followed": [
        "username_1",
        "username_3",
        "username_4"
    ],
    "followers": [
        "username_3",
        "username_4"
    ]
}

В настоящее время, когдаuser_1 следует за другим user_2 Я обновляю документ базы данных для user_1 - нет проблем. Но теперь мне также нужно обновить документ для user_2, в частности массив строк - followers. Как я могу сделать это с помощью лазурной функции с привязками? Единственный способ, которым я придумал, - это запросить базу данных для всего документа, обновить ее на стороне клиента и затем вернуть обратно в базу данных, перезаписав предыдущий документ. Однако это кажется смешным ...

1 Ответ

0 голосов
/ 23 октября 2019

Cosmos DB не поддерживает частичные обновления в данный момент, поэтому вытащить документ, добавить элемент в массив и затем выполнить PUT - единственный вариант.

Сказав это, проблема с вашими даннымидизайн состоит в том, что followed и followers являются неограниченными массивами , где ваш размер пользователя может расти без контроля. Чем больше размер, тем больше операций RU потребуется.

Пожалуйста, смотрите Когда не нужно вставлять здесь https://docs.microsoft.com/azure/cosmos-db/modeling-data#when-not-to-embed

Я написал документ дизайна для социальных приложений, когдаЯ работал над созданием социального приложения: https://docs.microsoft.com/azure/cosmos-db/social-media-apps

В идеале, отношение А следует за В, это был бы собственный документ. Вы можете хранить их в учетной записи Graph для оптимальной производительности, поскольку на самом деле вы строите здесь график, и вы будете выполнять следующие запросы: «Кто следует за B?». или «Кто следует за моими последователями?».

...