使用Node.js通过ID从DocumentDB读取文档失败

时间:2017-03-24 12:31:39

标签: javascript node.js azure-cosmosdb

我正在尝试使用文档ID从DocumentDB读取单个文档。该集合有四个字段,author是分区键。

{
  "id": string,
  "author": string,
  "title": string,
  "year": int
}

我有两个函数用于读取存储在DocumentDB中的记录。 queryCollectionByBookId按文档ID读取单个文档,queryCollectionGetBooks返回集合中的所有文档。

var dbutils = {
    queryCollectionByBookId: function(client, documentUrl) {
        return new Promise((resolve, reject) => {
            client.readDocument(documentUrl, function(err, doc) {
                if (err) {
                    reject(err);
                } else {
                    resolve(doc);
                }
            });
        });
    },
    queryCollectionGetBooks: function(client, collectionUrl) {
        return new Promise((resolve, reject) => {
            client.readDocuments(collectionUrl).toArray((err, results) => {
                if (err)
                    reject(err);
                else {
                    resolve(results);
                }
            });
        });
    }
};

queryCollectionGetBooks函数运行正常,但queryCollectionByBookId会返回以下错误消息。

{"Errors":["The partition key supplied in x-ms-partitionkey header has fewer components than defined in the the collection."]}

是否有其他人看过此错误消息并找到了解决方法?

1 个答案:

答案 0 :(得分:4)

这是对node.js客户端文档的疏忽,但您必须在options.partitionKey调用中的可选第二个参数中添加readDocument(link, options, callback)属性。

它也是文档中的疏忽但我认为partitionKey需要是一个包含单个元素的数组(例如{options: {partitionKey: ["myKey"]}} [更新:我告诉它它现在可以用于单个分区键值,但我自己没有确认。]

或者,您可以将options.enableCrossPartitionQuery属性设置为true,但效率较低。