从DocumentDb中删除特定文档

jim*_*mbo 4 c# azure azure-cosmosdb

以下代码检索具有特定jobId的所有CrawlResult文档.

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

现在我想删除具有此特定jobId的所有文档.删除我发现的文件的唯一方法是:

documentDb.DeleteDocumentAsync(string documentLink)
Run Code Online (Sandbox Code Playgroud)

但是如何让documentLink执行documentDb.DeleteDocumentAsync()

Ara*_* R. 11

为此,您需要编写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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Meh*_*ral 5

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

  • 首先,您应该创建客户端实例

    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;
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 接下来,您可以像这样访问单个文档

    private static Document GetDocument(string id)
    {
        return Client.CreateDocumentQuery(Collection.DocumentsLink)
            .Where(d => d.Id == id)
            .AsEnumerable()
            .FirstOrDefault();
    }
    
    Run Code Online (Sandbox Code Playgroud)
  • 然后你可以做每个CRUD操作员.在这种情况下,您可以使用它

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

总而言之,您可以在获取Document实例后访问文档链接.之后,您可以找到SelfLink属性.

干杯.

  • 你是如何创建Collection.DocumentsLink的? (3认同)