node.js - 使用 NodeJS 查询 CosmosDB

标签 node.js azure azure-cosmosdb

我正在使用 NodeJS 查询现有的 Azure CosmosDB 数据库。

getItems: function (callback) {
    var self = this;

    var querySpec = {
        query: 'SELECT * FROM root'
    };

    self.client.queryDocuments(self.collection._self, querySpec).toArray(function (err, results) {
        if (err) {
            console.log(err.body);
            callback(err);
        } else {
            callback(null, results);
        }
    });
}

由于某种原因,它一直提示跨分区查询。我不太确定它是什么。我有什么想法可以找到这个分区键以及如何设置它吗?另外,如何避免查询中出现此异常?

完整错误消息:需要跨分区查询,但已禁用。请将 x-ms-documentdb-query-enablecrosspartition 设置为 true,指定 x-ms-documentdb-partitionkey,或修改您的查询以避免此异常。

附注我知道已经有人问过类似的问题了,但没有一个是用 NodeJS 来解决的。

最佳答案

您收到此错误是因为您查询的文档集合是分区集合。

为了查询分区集合,您需要指定要执行查询的分区,或者指定要跨分区查询。顺便说一句,推荐前者。

对于跨分区查询,您需要在选项中指定相同的内容。所以你的代码将是:

getItems: function (callback) {
    var self = this;

    var querySpec = {
        query: 'SELECT * FROM root'
    };
    const options = {//Query options
      enableCrossPartitionQuery: true
    };

    self.client.queryDocuments(self.collection._self, querySpec, options).toArray(function (err, results) {
        if (err) {
            console.log(err.body);
            callback(err);
        } else {
            callback(null, results);
        }
    });
}

如果您要查询单个分区,则需要在查询中指定分区键值。在这种情况下,您的选项将类似于:

const options = {
  partitionKey: 'partition-key-value'
};

关于node.js - 使用 NodeJS 查询 CosmosDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48739781/

相关文章:

azure - Cosmos 插入不会有效并行化

azure - 是否可以使用 Cosmos DB 代替 Azure SQL 数据库?

azure-cosmosdb - Cosmos DB SQL API > 筛选出具有特定值的子数组对象

javascript - 从 NPM( Node 模块)解析 nunjucks 模板?

node.js - 在 Windows 上使用 pm2 时如何传递 Node 参数

linux - 使用NodeJs执行Linux命令遇到错误

azure - 将文件拖放到 Sharepoint 文件夹中时如何触发 Azure 逻辑应用

c# - Azure Function V2 服务总线消息延迟

javascript - Expressjs 服务器地址主机不返回任何内容

azure - azure函数或azure逻辑应用程序中是否有Azure文件共享的触发器?