使用Cosmos SP进行upsert时出现400错误

时间:2018-02-21 07:53:54

标签: azure-cosmosdb

我试图执行以下SP

function createMyDocument() {
    var collection = getContext().getCollection();

    var doc = {
        "someId": "123134444",
    };
    var options = {};
    options['PartitionKey'] =  ["someId"];

    var isAccepted = collection.upsertDocument(collection.getSelfLink(), doc, options, function (error, resources, options) {

    });

}

和cosmos继续抱怨分区密钥出现问题

    { code: 400,
      body: '{"code":"BadRequest","message":"Message: {\\"Errors\\":
[\\"PartitionKey extracted from document doesn\'t match the one specified in the header\\"]}
    }

有没有人知道如何传递options中的partion键,以便通过此验证?

2 个答案:

答案 0 :(得分:1)

想出来。错误在于我们如何调用存储过程。

我们是如何做到的

 client.executeStoredProcedure('dbs/db1/colls/coll-1/sprocs/createMyDocument',
        {},
        {} //Here you have to pass in the partition key

);

它必须如何

     client.executeStoredProcedure('dbs/db1/colls/coll-1/sprocs/createMyDocument',
            {},
            {"partitionKey": "43321"} 
);

答案 1 :(得分:0)

我认为你误解了partitionkeyoptions[]属性的含义。

例如,我的容器创建如下:

enter image description here

分区键是" name"我的收藏在这里。您可以检查收藏夹的分区键。

我的文件如下:

{
    "id": "1",
    "name": "jay"
}

{
    "id": "2",
    "name": "jay2"
}

我的partitionkey&#39; name&#39; ,所以我在这里有两个分区:&#39; jay&#39; 和<强>&#39; jay1&#39;

所以,在这里你应该在你的问题中将partitionkey属性设置为&#39; 123134444&#39; ,而不是&#39; someId&#39;

有关cosmos db partition key的更多详情。

希望它对你有所帮助。