簡體   English   中英

從DocumentDb中刪除特定文檔

[英]Delete specific document from DocumentDb

以下代碼檢索具有特定jobId的所有CrawlResult文檔。

var result = (from c in documentDb.CreateDocumentQuery<Shared.CrawlResult>(collection.SelfLink)
              where c.JobId == jobId
              select c);

現在我想刪除具有此特定jobId的所有文檔。 刪除我發現的文件的唯一方法是:

documentDb.DeleteDocumentAsync(string documentLink)

但是如何讓documentLink執行documentDb.DeleteDocumentAsync()

為此,您需要編寫SQL查詢,以便可以動態訪問Document的內部屬性以及CrawlResult。

例如,如下面的代碼:

class CrawlResult
{
    [JsonProperty("jobId")]
    public string JobId;
}

private async Task QueryAndDelete(DocumentClient client, string collectionLink)
{
    await client.CreateDocumentAsync(collectionLink, new CrawlResult { JobId = "J123" });
    await client.CreateDocumentAsync(collectionLink, new CrawlResult { JobId = "J456" });

    foreach (Document document in client.CreateDocumentQuery(
        collectionLink,
        new SqlQuerySpec(
            "SELECT * FROM crawlResults r WHERE r.jobId = @jobId",
            new SqlParameterCollection(new[] { new SqlParameter { Name = "@jobId", Value = "J123" } })
            )))
    {
        // Optionally, cast to CrawlResult using a dynamic cast
        CrawlResult result = (CrawlResult)(dynamic)document;

        await client.DeleteDocumentAsync(document.SelfLink);
    }
}

那么,官方和有效的方式如下:

  • 首先,您應該創建客戶端實例

     private static DocumentClient Client { get { if (client == null) { string endpoint = ConfigurationManager.AppSettings["endpoint"]; string authKey = ConfigurationManager.AppSettings["authKey"]; Uri endpointUri = new Uri(endpoint); client = new DocumentClient(endpointUri, authKey); } return client; } } 
  • 接下來,您可以像這樣訪問單個文檔

     private static Document GetDocument(string id) { return Client.CreateDocumentQuery(Collection.DocumentsLink) .Where(d => d.Id == id) .AsEnumerable() .FirstOrDefault(); } 
  • 然后你可以做每個CRUD操作員。 在這種情況下,您可以使用它

     public static async Task DeleteAsync(string id) { Document doc = GetDocument(id); await Client.DeleteDocumentAsync(doc.SelfLink); } 

總而言之,您可以在獲取Document實例后訪問文檔鏈接。 之后,您可以找到SelfLink屬性。

干杯。

看起來我有點太晚了,但這是我一直在努力的事情。

public async Task Delete(object key)
{
    var result = await _client.ReadDocumentAsync(UriFactory.CreateDocumentUri(dbName, nameof(TEntity), key as string));

    await _client.DeleteDocumentAsync(result.Resource.SelfLink);
}

希望這有幫助!

刪除特定文檔的另一種可能方法如下:

*)首先,您應該創建一個Document客戶端實例。

this.client = new DocumentClient(new Uri(m_ConnInfo.EndPointURL), m_ConnInfo.AccountKey);
Uri _docDbUri = new Uri("https://8878d4ed-0ee0-4-321-c9ef.documents.azure.com");
using (var client = new DocumentClient(_docDbUri, m_ConnInfo.AccountKey))
{
      try
      {
          var coll = client.CreateDocumentCollectionQuery(db.CollectionsLink).ToList().First();
          var docs = client.CreateDocumentQuery(coll.DocumentsLink);
          foreach (var doc in docs)
          {                       
               if (doc.Id == "123")
               {
                   client.DeleteDocumentAsync(doc.SelfLink).Wait();
               }      
          }
      }
      catch (Exception)
      {
           //ignored
      }
}

我希望這個問題對這個問題更有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM