How do you update sub-document in cosmos db

后端 未结 2 1561
情深已故
情深已故 2021-01-05 00:15

I am new to Cosmos Db and want to understand how to delete/upsert sub-documents within a document collection.

If i have a document:

{ \"Id\": \"1234

2条回答
  •  孤街浪徒
    2021-01-05 00:40

    As @Sajeetharan said, azure cosmos db doesn't support partial updates now. It seems the team is actively working on this feature. Now,you could update entire document in stored procedure.

    Sample code as below for reference:

    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);
        });
    }
    

    However, Azure Cosmos DB support MongoDB protocol. You could confirm supported features on Azure official page.

    So,incremental operations are supported. Please refer to this link.

    Hope it helps you.Any concern,please feel free to let me know.

提交回复
热议问题