【问题标题】:Bulk patch operation @azure/cosmos javascript sdk批量补丁操作@azure/cosmos javascript sdk
【发布时间】:2022-06-15 12:17:01
【问题描述】:

我的 Azure Cosmos DB 中有一个成本指南容器(使用核心 SQL API)。每个成本指南都有一系列材料。我需要在容器中的每个文档中为这个数组添加一个材质。这可能在单个事务中使用 javascript 吗?我熟悉使用补丁操作单独更新部分文档,但如果可能的话,我更愿意一次完成所有操作。我正在使用@azure/cosmos 3.15 版包

这是我在函数应用中更新单个文档的方式:

const CosmosClient = require('@azure/cosmos').CosmosClient;
const config = require('../config/config');
const { endpoint, key, databaseId } = config;
const client = new CosmosClient({ endpoint, key });
const database = client.database(databaseId);

module.exports = async function (context, req) {
    const containerId = req.query.containerId;
    const container = database.container(containerId);
    const id = req.query.id;
    const updates = req.body;

    const querySpec = {
        query: `SELECT * from c where c.id = "${id}"`
    }

    const { resources: items } = await container.items
        .query(querySpec)
        .fetchAll()

    const patchOp = [];

    // loop through updates object
    Object.keys(updates).map(key => {
        patchOp.push({
            op: 'replace',
            path: `/${key}`,
            value: updates[key]
        })
    })

    const { resource: patchSource } = await container.item(items[0].id, items[0].id).patch(patchOp);
}

【问题讨论】:

    标签: javascript azure azure-cosmosdb patch


    【解决方案1】:

    从技术上讲,到目前为止,还没有这种类型的使用 Java Script 的单一事务可用。还有其他可能性,例如使用 .NET 来满足类似要求。

    其他语言如 JAVA 和 PYTHON 也有部分实现。 Terraform 还可以在部分实现方面有所帮助。

    https://docs.microsoft.com/en-us/azure/cosmos-db/sql/sql-api-sdk-bulk-executor-dot-net

    【讨论】:

    • 哎呀,这就是我害怕的。谢谢!!
    【解决方案2】:

    我见过的最接近的是对容器内的项目使用批量或批处理操作。例如:

    const operations = [
       {
          operationType: "Create",
          resourceBody: { id: "doc1", name: "sample", key: "A" }
       },
       {
          operationType: "Upsert",
          partitionKey: 'A',
          resourceBody: { id: "doc2", name: "other", key: "A" }
       }
    ];
    
    await database.container.items.batch(operations);
    

    文档链接:https://docs.microsoft.com/en-us/javascript/api/@azure/cosmos/items?view=azure-node-latest#@azure-cosmos-items-batch

    【讨论】:

      猜你喜欢
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 2018-11-24
      • 1970-01-01
      相关资源
      最近更新 更多