2017-09-05 147 views
1

我正尝试在使用node.js的Azure Cosmos数据库中创建存储过程。创建存储过程是成功的,但试图执行它时(从javascript/nodejs),它不返回任何文档。Azure Cosmos DB存储过程不返回文档

首先,我定义的存储过程,然后在宇宙DB注册它:

var DocumentDBClient = require('documentdb').DocumentClient; 

var host = "our-hostname"; // Add your endpoint 
var masterKey = "our-master-key"; // Add the masterkey of the endpoint 

var client = new DocumentDBClient(host, {masterKey: masterKey}); 

var powerPlantDataReadingStoredProc = { 
    id: "GetPowerPlantDataReadingsSproc", 
    serverScript: function() {   
     var context = getContext();   
     var collection = context.getCollection(); 
     var request = context.getRequest(); 
     var response = context.getResponse(); 

     var isAccepted = collection.queryDocuments(collection.getSelfLink(), 
        'SELECT TOP 1 * FROM c', 
        function(err, feed, options) { 
         response.setBody(JSON.stringify(feed)); 
        }); 

     if(!isAccepted) throw new Error("The query was not acceted by the server"); 
    } 
}; 

// Register stored proc 
var createdStoredProc; 

client.createStoredProcedure('dbs/PowerPlantDataReadings/colls/DataReadings', powerPlantDataReadingStoredProc, function(err, sproc) { 
    createdStoredProc = sproc; 
}); 

而且我使用执行它的代码:

client.executeStoredProcedure("dbs/PowerPlantDataReadings/colls/DataReadings/sprocs/GetPowerPlantDataReadingsSproc", null, { partitionKey: "datareadings" }, function(err, results, responseHeaders) { 
    if(err) { 
     console.log("Error: "); 
     console.log(JSON.stringify(err)); 
    } 

    if(responseHeaders) { 
     console.log("Headers: "); 
     console.log(JSON.stringify(responseHeaders)); 
    } 

    console.log("Results: " + results); 

    if(results) { 
     console.log("Results: "); 
     console.log(JSON.stringify(results)); 
    } 
}); 

我越来越没有错误在控制台。只是一个空阵列。另外,还有文件中的收集;-)

有没有人知道我在这里失踪?

在此先感谢。

编辑:

从存储过程获取这些响应头:

Headers: {"cache-control":"no-store, no-cache","pragma":"no-cache","transfer-encoding":"chunked","content-type":"application/json","server":"Microsoft-HTTPAPI/2.0","strict-transport-security":"max-age=31536000","x-ms-last-state-change-utc":"Tue, 05 Sep 2017 08:01:38.741 GMT","x-ms-schemaversion":"1.3","x-ms-alt-content-path":"dbs/PowerPlantDataReadings/colls/DataReadings/sprocs/GetPowerPlantDataReadingsSproc","x-ms-content-path":"cjFwAKg0WQA=","x-ms-quorum-acked-lsn":"25347","x-ms-current-write-quorum":"3","x-ms-current-replica-set-size":"4","x-ms-xp-role":"1","x-ms-request-charge":"6.12","x-ms-serviceversion":"version=1.14.89.5","x-ms-activity-id":"604b8d09-ad08-427a-8dee-1b7862e0e092","x-ms-session-token":"0:25347","x-ms-gatewayversion":"version=1.14.89.5","date":"Tue, 05 Sep 2017 09:38:32 GMT","x-ms-throttle-retry-count":0,"x-ms-throttle-retry-wait-time-ms":0} Results: []

而且,使得在Azure门户网站查询编辑器查询时,我得到的结果如预期:

enter image description here

我的分区键如下:

enter image description here

+0

不应该'serverScript'属性名称是在你的代码'body'? –

+0

@GauravMantri嗯,不是根据这篇文章,它似乎? :-) https://docs.microsoft.com/en-us/azure/cosmos-db/programming –

+0

我的基础是:https://docs.microsoft.com/en-us/rest/api/documentdb /创建-A-存储过程。实际上,我们使用的是Node SDK,我们使用'body'属性来指定函数体。 –

回答

0

您是否尝试将分区键设置为实际值?这对我有效。我给我的分区密钥名称存储过程的输入,但我实际上给了它一个分区键值(因为存储过程在特定的分区上运行),它的工作。

编辑:

只是看着意见和拉夫似乎表明这种方法也