当前位置: 首页 > 知识库问答 >
问题:

如何使用Azure DocumentDB执行升级?

尹弘壮
2023-03-14

Azure DocumentDB 不支持更新测试。是否有合理的解决方法来实现相同的功能?

使用检查文档是否存在的存储过程来确定是否应该执行插入或更新是一种有效的策略吗?

如果我需要批量执行数千个这些操作,该怎么办?

在这里投票支持该功能:

http://feedback.azure.com/forums/263030-documentdb/suggestions/7075256-provide-for-upsert

更新——这是我在批量增加存储过程中的尝试。

function bulkImport(docs) { 
    var collection = getContext().getCollection(); 
    var collectionLink = collection.getSelfLink(); 
    var count = 0; 

    if (!docs) throw new Error('Docs parameter is null'); 

    var docsLength = docs.length; 
    if (docsLength == 0) { 
        getContext().getResponse().setBody(0); 
    } 

    tryUpsert(docs[count], callback); 

    function tryUpsert(doc, callback) {

        var query = { query: ""select * from root r where r.id = @id"", parameters: [ {name: ""@id"", value: doc.id}]};

        var isAccepted = collection.queryDocuments(collectionLink, query, function(err, resources, options) {
            if (err) throw err;                           

            if(resources.length > 0) {
                // Perform a replace       
                var isAccepted = collection.replaceDocument(resources[0]._self, doc, callback);     
                if (!isAccepted) getContext().getResponse().setBody(count);                          
            }
            else {
                // Perform a create
                var isAccepted = collection.createDocument(collectionLink, doc, callback);   
                if (!isAccepted) getContext().getResponse().setBody(count);                             
            }
        });  

        if (!isAccepted) getContext().getResponse().setBody(count); 
    }

    function callback(err, doc, options) { 
        if (err) throw err; 

        // One more document has been inserted, increment the count. 
        count++; 

        if (count >= docsLength) { 
            // If we have created all documents, we are done. Just set the response. 
            getContext().getResponse().setBody(count); 
        } else { 
            // Create next document. 
            tryUpsert(docs[count], callback); 
        } 
    } 
} 

共有1个答案

逑禄
2023-03-14

更新(2015-10-06):现在Azure DocumentDB支持Atomic upsert。

是的,存储过程对upsert非常有用。

文档数据库的 Github 上甚至还有代码示例:

>

  • Upsert(针对插入优化):https://github.com/aliuy/azure-node-samples/blob/master/documentdb-server-side-js/stored-procedures/upsert.js

    Upsert(针对替换优化):https://github.com/aliuy/azure-node-samples/blob/master/documentdb-server-side-js/stored-procedures/upsertOptimizedForReplace.js

    批量导入/更新:https://github.com/Azure/azure-documentdb-hadoop/blob/master/src/BulkImportScript.js

  •  类似资料:
    • 我从jacoco生成了一个代码覆盖率报告,它就是jacoco。执行官。但我不知道如何使用它。。。 我生成它的方式是通过命令行: 然后我得到了杰科科。执行报告。我所需要的只是百分比的数量,我只使用命令行。有没有办法将此报告转换为可读的txt文件? 谢谢大家

    • 问题内容: 鉴于Java 9已经来临,我们终于可以拥有Java REPL了,我希望有一种方法可以在脚本中添加shebang并对其进行解释。 我尝试创建: 然而,这给出了: 事实证明,OpenJDK https://bugs.openjdk.java.net/browse/JDK-8167440中对此有增强要求。 还有其他方法吗? 问题答案: 用 作为的第一行。该脚本可能如下所示: 当然,命令行选项

    • 问题内容: 我想从数据库表中选择行,然后使用PHP而不是基于参数的SQL(在此情况下,按项目)对行进行分组。 SQL: 这就是我希望使用PHP而不是SQL来查看结果的方式 的PHP: 我确定有一个PHP数组函数,对此我并不陌生,有想法吗? 问题答案: 最简单的方法是利用数组键的唯一性:

    • 问题内容: 我需要在Alembic升级期间更改数据。 我目前在第一个修订版中有一个“玩家”表: 我想介绍一个“团队”表。我创建了第二个修订版: 我希望第二次迁移也添加以下数据: 填充团队表: 根据players.team名称更新players.team_id: 如何在升级脚本中执行插入和更新? 问题答案: 您需要的是 数据迁移 ,而不是Alembic文档中最普遍的 模式迁移 。 该答案假设您使用声

    • 使用pip更新包的方法是什么?那些不工作: 我知道这是一个简单的问题,但它是需要的,因为它不是那么容易找到(pip留档不弹出和其他问题从堆栈溢出相关,但不完全是关于)

    • 问题内容: 我开始使用seleniumselenium(selenium包装API),必须说它是一个很棒的工具,但是我唯一的问题是它缺少在线文档或用法示例。 任何想法如何在google- Chrome中运行以selenide编码的应用程序。我正在使用eclipse作为IDE。我在运行配置中添加了带有值chrome的环境变量“浏览器”,但是在运行时,它将使用Firefox。 我的堆栈是JDBC Ja