【问题标题】:Read document from DocumentDB by ID using Node.js fails使用 Node.js 按 ID 从 DocumentDB 读取文档失败
【发布时间】:2017-07-18 02:27:18
【问题描述】:

我正在尝试使用文档 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."]}

有其他人看到此错误消息并找到解决方法吗?

【问题讨论】:

    标签: javascript node.js azure-cosmosdb


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢!将options.partitionKey 属性添加到readDocumentcall 就可以了。同样的技巧也适用于enableCrossPartitionQuery。可以通过将options.enableCrossPartitionQuery属性设置为true来启用跨分区查询。
    • 好点,但请记住,当您使用跨分区操作进行扩展时,您会受到越来越大的 RU 影响。对于单个文档可能没问题,但您希望在查询中避免使用它。
    猜你喜欢
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多