Node.js - 使用azure DocumentDB和readDocument时传递分区键(链接,选项,回调)

时间:2017-04-03 16:32:11

标签: node.js azure azure-cosmosdb

我尝试使用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', };

2 个答案:

答案 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 }
)

https://stackoverflow.com/a/44130039/1234356