我编写了一个简单的存储过程来查询集合并返回响应但是当我以node.js脚本执行它时,我得到400
错误代码并出现以下错误消息:
"从文档中提取的PartitionKey与标题中指定的不匹配"
当打印getContext().getCollection.getSelfLink()
值时,我得到dbs/3Mk0AA==/colls/3Mk0AOWMbw0=/
,但我的数据库和集合ID是其他一些值。
非常感谢任何形式的帮助。
答案 0 :(得分:0)
当您观察在Azure Cosmos DB中创建的文档时,除了您设置的ID之外,您还会看到几个系统生成的属性。
您可以从System vs. user defined resources找到官方声明。
{
"id": "1",
"statusId": "new",
"_rid": "duUuAN3LzQEIAAAAAAAAAA==",
"_self": "dbs/duUuAA==/colls/duUuAN3LzQE=/docs/duUuAN3LzQEIAAAAAAAAAA==/",
"_etag": "\"0400d4ee-0000-0000-0000-5a24ac3f0000\"",
"_attachments": "attachments/",
"_ts": 1512352831
}
getContext().getCollection.getSelfLink()
方法返回"_self"
值,而不是您设置的Id
值。
从文档中提取的PartitionKey与指定的不匹配 在标题中
此问题应归因于您错误地设置了PartitionKey。
假设您的分区键为color
,并且数据库中有两个分区red
和blue
。 PK应设置为red
或blue
,而不是color
。
你可以参考我之前回答的类似帖子:How to specify NONE partition key for deleting a document in Document DB java SDK?
希望它对你有所帮助。
答案 1 :(得分:0)
是的,谢谢你的帮助!!
包括其他人尝试,在执行为我工作的存储过程时添加分区键。代码是,
client.executeStoredProcedure('/dbs/<database-id>/colls/<collection-id>/sprocs/<storedproc-id>', <input to the procedure(if any)>, { partitionKey: <partition-field-id> }, callback);