首页 > 解决方案 > Azure CosmosDB 存储过程以更新所有项目的字段

问题描述

假设我们有一个包含以下项目的容器

{
  location:CA,
  bool: false
}

{
  location:CA,
  bool: false
}

{
  location:CA,
  bool: false
}

我们如何编写存储过程来查询所有项目并将所有项目的 bool 字段从 false 更新为 true?我还没有找到任何参考资料,我知道 CosmosDB 存储过程只支持查询而不是更新或删除。

标签: azurestored-proceduresazure-cosmosdbazure-cosmosdb-sqlapiazure-cosmosdb-tables

解决方案


这个存储过程代码:

// SAMPLE STORED PROCEDURE
function sample() {
    var collection = getContext().getCollection();

    // Query all documents in one logic partition
    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        'SELECT * FROM root r',
    function (err, feed, options) {
        if (err) throw err;

        if (!feed || !feed.length) {
            var response = getContext().getResponse();
            response.setBody('no docs found');
        }
        else {
            feed.forEach(element => {
                element.bool = true;
                collection.replaceDocument(element._self, element,function (err){
                    if (err) throw err;
                })
            })
            var response = getContext().getResponse();
            response.setBody("replace success");
        }
    });

    if (!isAccepted) throw new Error('The query was not accepted by the server.');
}

执行存储过程: 在此处输入图像描述

顺便说一句,您的分区键应该是/location.


推荐阅读