使用NodeJS查询CosmosDB

时间:2018-02-12 04:59:05

标签: node.js azure azure-cosmosdb

我想用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有关。

1 个答案:

答案 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'
};