从 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();
}
然后就可以做每一个增删改查操作了。在这种情况下,你可以使用这个
public static async Task DeleteAsync(string id)
{
Document doc = GetDocument(id);
await Client.DeleteDocumentAsync(doc.SelfLink);
}
综上所述,您可以在获取 Document 实例后访问文档 link。之后就可以找到SelfLink属性了。
干杯。
另一种删除特定文档的可能方法如下:
*) 首先你应该创建一个文档客户端实例。
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
}
}
我希望这个对这个问题更有帮助。
看来我有点晚了,但这是我一直在处理的事情。
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);
}
希望对您有所帮助!
以下代码检索具有特定 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(); }
然后就可以做每一个增删改查操作了。在这种情况下,你可以使用这个
public static async Task DeleteAsync(string id) { Document doc = GetDocument(id); await Client.DeleteDocumentAsync(doc.SelfLink); }
综上所述,您可以在获取 Document 实例后访问文档 link。之后就可以找到SelfLink属性了。
干杯。
另一种删除特定文档的可能方法如下:
*) 首先你应该创建一个文档客户端实例。
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
}
}
我希望这个对这个问题更有帮助。
看来我有点晚了,但这是我一直在处理的事情。
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);
}
希望对您有所帮助!