我正在使用 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/