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)
那么,官方和有效的方式如下:
首先,您应该创建客户端实例
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属性.
干杯.