【问题标题】:Delete document when partition key comes as child row c# cosmos DB当分区键作为子行 c# cosmos DB 时删除文档
【发布时间】:2020-04-09 04:02:49
【问题描述】:

我有一个带有 JSON 文档的集合

{
"type": "OrderHistory",
"values": [
    {       
        "CustomerId": "8990",
        "DeliveryInstructions": "",
        "UpdateDate": "2020-02-07T14:33:50",
        "OrderId": "00716",

        "Items": [
            {
                "ProductId": "402",

            }
        ],
        "id": "0071661617+Settled"
    }
],
"id": "c57ab11a-2aec-45a4-a3e8-063598e15061",
"_rid": "9-kVAPFOVXkBAAAAAAAAAA==",
"_self": "dbs/9-kVAA==/colls/9-kVAPFOVXk=/docs/9-kVAPFOVXkBAAAAAAAAAA==/",
"_etag": "\"35008246-0000-0200-0000-5e8dc41a0000\"",
"_attachments": "attachments/",
"_ts": 1586349082
}

问题在这里 CustomerId 是 partitionkey 。我们必须根据条件删除记录。我使用下面的方法来删除记录,该方法适用于没有子行的普通 json 。可能是因为分区值作为子行值出现,它的没有按预期工作。

   ///Deleting records from collection based on documentId  
    private async static Task DeleterecordByDocumentID(DocumentClient client, string databaseName, 
    string collectionName, string documentName, string Partitionkeyvalue)
    {
        var docUri = UriFactory.CreateDocumentUri(databaseName, collectionName, documentName);
        RequestOptions options = new RequestOptions { PartitionKey = new 
        PartitionKey(Partitionkeyvalue) };
        var deleteresponse = await client.DeleteDocumentAsync(docUri, options);
    }

如果有人能建议删除分区键显示为子行的 cosmos DB 记录的方法,那将很有帮助。提前致谢。

【问题讨论】:

  • 你能分享你的容器定义吗?我想知道你是如何在那里定义分区键的(我的意思是你是如何指定路径的)?

标签: c# .net azure


【解决方案1】:

你上面的方法看起来很相似,下面的方法对我有用。

使用 partitionKey 删除文档

public virtual async Task<bool> DeleteAsync(string databaseId, string collectionId, string id, string partitionKey)
    {
        await client.DeleteDocumentAsync(UriFactory.CreateDocumentUri(databaseId, collectionId, id), new RequestOptions { PartitionKey = new PartitionKey(partitionKey) });
        return true;
    }

删除没有 partitionKey 的文档

public virtual async Task<bool> DeleteAsync(string databaseId, string collectionId, string id)
    {
        await client.DeleteDocumentAsync(UriFactory.CreateDocumentUri(databaseId, collectionId, id));
        return true;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多