Как вы обновляете поддокумент в космосе БД - PullRequest
0 голосов
/ 09 мая 2018

Я новичок в Cosmos Db и хочу понять, как удалять / вставлять поддокументы в коллекции документов.

Если у меня есть документ:

{ "Id": "1234", "Name": "foo", "Items": [ { "Id": "abcd", "Age": 35, "Claims": [ { "Name": "email", "Value": "foo@bar.com" } ] } ] }

Как мне:

1) добавить элемент в список элементов в документе.

2) удалить существующий предмет из списка предметов

3) добавить элемент в список элементов в документе

4) добавить / удалить значение претензии для существующего элемента в списке элементов?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Как сказал @Sajeetharan, azure cosmos db не поддерживает partial updates сейчас. Похоже, команда активно работает над этой функцией. Теперь вы можете обновить весь документ в stored procedure.

Пример кода, как показано ниже для справки:

function updateSproc(id, update) {
    var collection = getContext().getCollection();
    var collectionLink = collection.getSelfLink();
    var response = getContext().getResponse();

    tryQueryAndUpdate();

    function tryQueryAndUpdate(continuation) {
        var query = {query: "select * from root r where r.id = @id", parameters: [{name: "@id", value: id}]};
        var requestOptions = {continuation: continuation};

        var isAccepted = collection.queryDocuments(collectionLink, query, requestOptions, function (err, documents, responseOptions) {
            if (err) throw err;

            if (documents.length > 0) {
                tryUpdate(documents[0]);
            } else {
                throw new Error("Document not found.");
            }
        });
    }

function tryUpdate(document) {
    var requestOptions = {etag: document._etag};

    var fields, i;

    fields = Object.keys(update);
    for (i = 0; i < fields.length; i++) {
       document[fields[i]] = update[fields[i]];
    }

    var isAccepted = collection.replaceDocument(document._self, document, requestOptions, function (err, updatedDocument, responseOptions) {
        if (err) throw err;
        response.setBody(updatedDocument);
    });
}

Однако Azure Cosmos DB поддерживает MongoDB protocol. Вы можете подтвердить поддерживаемые функции на официальной странице Azure .

Итак, incremental operations поддерживаются. Пожалуйста, обратитесь к этой ссылке .

Надеюсь, это поможет вам. Любая проблема, пожалуйста, дайте мне знать.

0 голосов
/ 09 мая 2018

В настоящее время нет способа, кроме как извлечь документ, выполнив модификацию и обновив его.

Однако есть User voice feature request, обновленное 5 марта 2018 года:

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