How do you update sub-document in cosmos db

后端 未结 2 1562
情深已故
情深已故 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:39

    Currently there is no way rather than retrieving the document doing the modification and updating it.

    However there is a User voice feature request has been updated on Mar 5, 2018:

    0 讨论(0)
  • 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.

    0 讨论(0)
提交回复
热议问题