无法从分区集合documentdb中删除文档

时间:2018-01-17 10:26:33

标签: c# azure azure-cosmosdb

我在azure cosmos db中使用分区集合。 我将文档插入到集合中。我尝试使用以下代码删除文档,但它没有被删除。引发以下异常。

internal static bool DeleteDocumentUnderPartition(AzureDocumentDbCollectionKind collectionKind, string partitionKey, string id)
    {
        var doc = DocumentClient.CreateDocumentQuery(GetCollectionLink(collectionKind), new FeedOptions
        {
            PartitionKey = new PartitionKey(partitionKey)
        }).AsEnumerable().FirstOrDefault(x => x.Id.Equals(id));
        DocumentClient.DeleteDocumentAsync(doc.SelfLink);            
        return true;
    }

传递了partitionKey的值:" 4c1429ca58f84e86a3f2e3d9ba1b74de"
id传递的值:" aa20ea966258492792864c3817313b2a"

例外 - >

  

DocumentClientException:消息:{"错误":["未找到资源"]}   ActivityId:96696cde-3ea3-41fb-bc9c-70dfd8cfac36,请求URI:   /应用/ 9dee6cc4-be09-426e-B153-f213b908337a /服务/ e61dcc20-86c2-4751-b4b7-53fd686d04ae /分区/ 42db755a-bded-4fe9-bd4c-3561fae0aaa9 /复制/ 131599878429038582s,   RequestStats:

     

ResponseTime:2018-01-18T10:20:07.5146574Z,StoreReadResult:   StorePhysicalAddress:   rntbd://100.114.47.168:13700 /应用/ 9dee6cc4-be09-426e-B153-f213b908337a /服务/ e61dcc20-86c2-4751-b4b7-53fd686d04ae /分区/ 42db755a-bded-4fe9-bd4c-3561fae0aaa9 /复制/ 131599878429038582s,   LSN:177530,GlobalCommittedLsn:177530,PartitionKeyRangeId :,   IsValid:True,StatusCode:0,IsGone:False,IsNotFound:True,   RequestCharge:1,ItemLSN:-1,ResourceType:Collection,   OperationType:读取

     

ResponseTime:2018-01-18T10:20:07.5146574Z,StoreReadResult:   StorePhysicalAddress:   rntbd://100.114.45.40:13700 /应用/ 9dee6cc4-be09-426e-B153-f213b908337a /服务/ e61dcc20-86c2-4751-b4b7-53fd686d04ae /分区/ 42db755a-bded-4fe9-bd4c-3561fae0aaa9 /复制/ 131606373510679694s,   LSN:177530,GlobalCommittedLsn:177530,PartitionKeyRangeId :,   IsValid:True,StatusCode:0,IsGone:False,IsNotFound:True,   RequestCharge:1,ItemLSN:-1,ResourceType:Collection,   OperationType:读取

但是,从另一个集合(非分区集合)中删除文档对我有用。 任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

我尝试使用示例代码重现您的问题,但失败了。

using Microsoft.Azure.Documents;
using Microsoft.Azure.Documents.Client;
using System;

namespace ConsoleApp1
{
    class Program
    {
        private static DocumentClient client;

        static void Main(string[] args)
        {

            client = new DocumentClient(new Uri("***"), "***");

            var docUri = UriFactory.CreateDocumentUri("db", "collpart", "1");
            var reqOptions = new RequestOptions { PartitionKey = new PartitionKey("1") };
            client.DeleteDocumentAsync(docUri, reqOptions).Wait();

            //block
            Console.ReadLine();
        }
    }
}

我在分区集合中的文档(id是我的分区键)就像:

enter image description here

我认为分区键可能是问题的关键。您需要提供分区键的值,而不是存储分区键的字段的名称。

如果可以正确删除文档,您可以尝试创建一个简单的新分区集合测试。

希望它对你有所帮助。

更新答案:

我认为你误解了partitionkeyFeedOptions属性的含义。

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

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; jay&#39;或者&#39; jay2&#39;,而不是&#39; name&#39;。

如果您没有设置错误的分区密钥,请分享您的分区密钥设置和要删除的文档的详细信息吗? (请隐藏敏感信息,谢谢)