getContext.getCollection()在CosmosDB存储过程中返回什么?

时间:2017-12-06 19:17:57

标签: node.js azure azure-cosmosdb

我编写了一个简单的存储过程来查询集合并返回响应但是当我以node.js脚本执行它时,我得到400错误代码并出现以下错误消息:

  

"从文档中提取的PartitionKey与标题中指定的不匹配"

当打印getContext().getCollection.getSelfLink()值时,我得到dbs/3Mk0AA==/colls/3Mk0AOWMbw0=/,但我的数据库和集合ID是其他一些值。

非常感谢任何形式的帮助。

2 个答案:

答案 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,并且数据库中有两个分区redblue。 PK应设置为redblue,而不是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);