【问题标题】:What does getContext.getCollection() return in CosmosDB stored procedure?CosmosDB 存储过程中的 getContext.getCollection() 返回什么?
【发布时间】:2017-12-06 19:17:57
【问题描述】:

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

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

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

我们将不胜感激任何形式的帮助。

【问题讨论】:

  • getSelfLink 打印系统生成的 ID,所以这可能不是问题。你能包括存储过程的源代码吗?您是否在请求标头中传递了分区键?

标签: node.js azure azure-cosmosdb


【解决方案1】:

当您观察您在 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?

希望对你有帮助。

【讨论】:

    【解决方案2】:

    是的,谢谢你们的帮助!!

    万一其他人尝试,在执行存储过程时添加分区键对我有用。代码是,

    client.executeStoredProcedure('/dbs/<database-id>/colls/<collection-id>/sprocs/<storedproc-id>', <input to the procedure(if any)>, { partitionKey: <partition-field-id> }, callback);
    

    【讨论】:

      猜你喜欢
      • 2014-06-18
      • 1970-01-01
      • 2016-06-19
      • 2019-04-25
      • 1970-01-01
      • 2019-04-20
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多