【问题标题】:Azure DocumentDB Stored Procedure in Node.js excute existingNode.js 中的 Azure DocumentDB 存储过程执行现有的
【发布时间】:2016-03-13 04:34:12
【问题描述】:

我一直在兜圈子。我正在尝试使用节点 js documentdb 库执行现有的存储过程。

var sproc = self.client.queryStoredProcedures(collection._self, "select * from root r WHERE r.id = 'helloWorld'");

self.client.executeStoredProcedure(sproc._self, function (err, res) {
    if(err){ 
        console.log(err);
    }else{
        console.log(res);`
    }
});

不完全确定 queryStoredProcedures(似乎不是这个的异步版本)是检索存储过程的 uri 的正确方法,我还没有设法让它工作。我还试图避免对数据库进行过多的往返,但据我所知,我要么对存储过程的 uri 进行硬编码,要么必须至少发出两个请求才能执行存储过程。

【问题讨论】:

    标签: javascript node.js azure stored-procedures azure-cosmosdb


    【解决方案1】:

    queryStoredProcedures(连同所有查询和读取函数)返回 QueryIterator 而不是实际结果。您在返回的 QueryIterator 上调用的方法是异步的。因此,按照您的示例的方法(减去错误处理),您可以这样做:

    var queryIterator = self.client.queryStoredProcedures(collection._self, "select * from root r WHERE r.id = 'helloWorld'");
    queryIterator.toArray(function(err, result) {
        var sproc = result[0];
        self.client.executeStoredProcedure(sproc._self, function (err, res) {
            console.log(res);`
        });
    });
    

    但是,由于引入了基于 id 的路由,您可以像这样简写上面的内容:

    var sprocLink = "dbs/myDatabase/colls/myCollection/sprocs/helloWorld";
    self.client.executeStoredProcedure(sprocLink, function (err, res) {
        console.log(res);`
    });
    

    【讨论】:

    • 谢谢。基于 id 的路由正是我想要的。干杯!
    猜你喜欢
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 2016-06-16
    相关资源
    最近更新 更多