我尝试使用Node.js查询具有分区键的DocumentDB,但它失败了。 根据这里 - https://stackoverflow.com/a/43002819/7799859 - 我需要传递分区键是一些被称为选项的对象。
有谁能告诉我在哪里可以找到这个options.partitionKey或options.enableCrossPartitionQuery的示例?
这个选项对象是什么?如何在NodeJS中创建它?
这是我的代码:
find: function (querySpec, callback)
{
var self = this;
console.log(self.collection);
console.log(self.collection._self);
console.log(this.collectionUrl);
var options = {
partitionKey: "myCustomKey"
};
self.client.queryDocuments(this.collectionUrl, querySpec,options).toArray(function (err, results) {
if (err) {
callback(err);
} else {
callback(null, results);
}
});
}
我添加了选项var,但是当我发送它时没有返回任何结果。
当我不发送时,这是错误:
{“code”:“BadRequest”,“message”:“需要交叉分区查询,但是 禁用。请将x-ms-documentdb-query-enablecrosspartition设置为 如果为true,请指定x-ms-documentdb-partitionkey,或将查询修改为 避免这种异常。\ r \ nActivityId: e4103506-d352-46d5-97d0-740d89065955" }
我使用的是Node版本4.2.6和最新版本的documentdb。 @ GaryLiu-MSFT这是来自package.json文件: - “documentdb”:“^ 1.10.0”,
这是我的querySpec:
var querySpec = { 查询:'SELECT * FROM root', };
答案 0 :(得分:2)
如果将分区键设置为分区键属性的名称,则不会得到任何结果,因为它实际上需要1个分区的文字值,即查询将仅针对1个分区运行。可能会使用一系列分区键,但我没有尝试过。
我找不到node.js SDK中有关分区键选项的任何文档,但它确实有效。如果您只想查询所有分区,请使用:
var options =
{
enableCrossPartitionQuery: true
};
答案 1 :(得分:1)
错误消息非常明确:因为您的查询跨越多个分区,您需要将enableCrossPartitionQuery
选项设置为true:
client.queryDocuments(
collectionUrl,
'SELECT * FROM c WHERE c.akunaCustomer = "xyz"',
{ enableCrossPartitionQuery: true }
)