首页 文章

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

提问于
浏览
0

我尝试使用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 = {query:'SELECT * FROM root',};

2 回答

  • 1

    如果将分区键设置为分区键属性的名称,则不会得到任何结果,因为它实际上需要1个分区的文字值,即查询将仅针对1个分区运行 . 可能会使用一系列分区键,但我没有尝试过 .

    我找不到node.js SDK中有关分区键选项的任何文档,但它确实有效 . 如果您只想查询所有分区,请使用:

    var options = 
        {
            enableCrossPartitionQuery: true
        };
    
  • 2

    错误消息非常明确:因为您的查询跨越多个分区,您需要将 enableCrossPartitionQuery 选项设置为true:

    client.queryDocuments(
        collectionUrl,
        'SELECT * FROM c WHERE c.akunaCustomer = "xyz"',
        { enableCrossPartitionQuery: true }
    )
    

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

相关问题