我正在尝试使用文档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."]}
是否有其他人看过此错误消息并找到了解决方法?
答案 0 :(得分:4)
这是对node.js客户端文档的疏忽,但您必须在options.partitionKey
调用中的可选第二个参数中添加readDocument(link, options, callback)
属性。
它也是文档中的疏忽但我认为partitionKey需要是一个包含单个元素的数组(例如{options: {partitionKey: ["myKey"]}}
[更新:我告诉它它现在可以用于单个分区键值,但我自己没有确认。]
或者,您可以将options.enableCrossPartitionQuery
属性设置为true
,但效率较低。