我想用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);
}
});
}
出于某种原因,它一直在抱怨Cross Partition Query
。我不确定它是什么。我可以找到Partition Key
的任何想法以及如何设置它?另外,如何在查询中避免此异常?
完整的错误消息:Cross partition query is required but disabled. Please set x-ms-documentdb-query-enablecrosspartition to true, specify x-ms-documentdb-partitionkey, or revise your query to avoid this exception.
P.S。我知道已经提出了几个类似的问题,但没有一个问题与NodeJS有关。
答案 0 :(得分:2)
您收到此错误,因为您要查询的文档集是分区集合。
要查询分区集合,您需要指定一个用于执行查询的分区,或指定要跨分区查询的分区。 BTW,前者是推荐的。
对于跨分区查询,您需要在选项中指定相同的内容。所以你的代码是:
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);
}
});
}
如果要查询单个分区,则需要在查询中指定分区键值。在这种情况下,您的options
类似于:
const options = {
partitionKey: 'partition-key-value'
};