【问题标题】:How to Query Database through Stored Procedure in Azure Cosmos DB如何通过 Azure Cosmos DB 中的存储过程查询数据库
【发布时间】:2019-02-22 18:57:18
【问题描述】:

我正在尝试创建一个存储过程,我的应用可以调用该存储过程来在 Azure 中的 SQL cosmos DB 上运行操作。我正在使用 Azure 门户进行开发。

我生成了一个示例程序,如下所示。

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

    // Query documents and take 1st item.
    var isAccepted = collection.queryDocuments(
        collection.getSelfLink(),
        'SELECT * FROM root r',
    function (err, feed, options) {
        if (err) throw err;

        // Check the feed and if empty, set the body to 'no docs found', 
        // else take 1st element from feed
        if (!feed || !feed.length) {
            var response = getContext().getResponse();
            response.setBody('no docs found');
        }
        else {
            var response = getContext().getResponse();
            var body = { prefix: prefix, feed: feed[0] };
            response.setBody(JSON.stringify(body));
        }
    });

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

当我运行它时,我没有得到任何结果,但是我在与此存储过程相同的树下的文档部分中创建了一个文档。当我运行存储过程时,我没有得到任何结果。我做错了什么?

【问题讨论】:

    标签: javascript sql azure azure-cosmosdb


    【解决方案1】:

    您的存储过程代码与门户网站上的示例代码完全相同。它工作正常,没有任何问题。

    也许你可以检查以下几点:

    1.检查文档是否与存储过程在同一个集合下。(关闭其他不相关的标签再检查!)

    2.检查sqlselect * from root r是否能抓取到portal上的数据。

    3.尝试创建一个新的集合和一个新的存储过程然后检查情况是否不变。

    4.尝试使用console.log()来调试和跟踪存储过程,请参考我之前的案例:How to debug Azure Cosmos DB Stored Procedures?


    总结一下,我们在执行查询sql的时候还需要检查一下是否漏掉了分区键!

    【讨论】:

    • 嘿,我发现了问题。我在尝试查询的文档中缺少分区键。
    • @jaredad7 当然,我将解决方案添加到我的答案中,您可以将其标记为答案。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多