【问题标题】:Stored procedure does not return any documents存储过程不返回任何文件
【发布时间】:2021-09-09 11:59:37
【问题描述】:

我正在尝试在我的 cosmos 数据库中创建一个非常简单的存储过程。目前,我只是根据它的Id查询一个文档,如下:

    function sample(id) {
        var context = getContext();
        var collection = context.getCollection();
        var collectionLink = collection.getSelfLink();
        var response = context.getResponse();
        executeQuery();

        function executeQuery() {
            var query = "select * from groups c where c.id = "+ id
            var isAccepted = collection.queryDocuments(collectionLink, query, {}, function (err, documents, responseOptions) {
                if (err) throw new Error("Error" + err.message);
                if (documents.length > 0) {
                    console.log("found")
                }
                else {
                    console.log("nothing")
                }
            })
        }


    }

由于某种原因,上述过程不返回任何文件。我不确定上面缺少什么。我已经仔细检查了id 是否存在。

另外,我只是在门户中执行该过程 - 它告诉我指定一个分区键 - 但输入 id 不会影响任何事情(ID 是我的分区键)

【问题讨论】:

  • 执行存储过程时,需要指定分区键属性的值(即Id的值)。

标签: azure-cosmosdb


【解决方案1】:

正如官方 MS 文档中明确指出的那样:How to run stored procedures

对于分区容器,在执行存储过程时, 必须在请求选项中提供分区键值。已存储 过程的范围始终限定为分区键。具有 存储的不同分区键值将不可见 过程。

查看此示例:

如果您考虑以下示例项目,其中分区键为 /city,则 MyidValue 将是 Hyderabad

由于您有 id 作为分区键,您可以参考上述示例将 MyidValue 指定为 1

注意:因为存储过程的范围是逻辑分区。如果您有多个逻辑分区,则只能访问一项。

更多详情请关注:How to write stored proceduresHow to run stored procedures

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-26
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多