我正在使用Microsoft的一个名为DocumentDB的新数据库。现在我想通过ID删除文档,但我无法弄清楚,如何做到这一点。 DocumentDB中的删除操作需要自我链接,它们与我自己的ID不同。
using (var client = new DocumentClient(EndPoint, AuthKey))
{
await client.DeleteDocumentAsync("**self-link here**");
}
我可以执行一个额外的查询来查找自我链接,然后传递它,但这需要两个操作而不是一个,这是我想要避免的。是否有更好的方法可以在不使用查询或存储过程的情况下通过ID删除条目?
答案 0 :(得分:5)
答案 1 :(得分:3)
以下是删除文档的方法
{
var docUri = UriFactory.CreateDocumentUri(_documentDataBaseId, _documentCollectionId, docId);
await _documentClient.DeleteDocumentAsync(docUri);
}
答案 2 :(得分:1)
此功能现已实施(截至2015年8月 - https://feedback.azure.com/forums/263030-documentdb/suggestions/6333050-it-should-be-possible-to-remove-a-document-by-id
答案 3 :(得分:1)
此功能现已推出,您可以拨打DeleteDocumentAsync
删除文件
// Get a Database by querying for it by id
Database db = client.CreateDatabaseQuery()
.Where(d => d.Id == "SalesDb")
.AsEnumerable()
.Single();
// Use that Database's SelfLink to query for a DocumentCollection by id
DocumentCollection coll = client.CreateDocumentCollectionQuery(db.SelfLink)
.Where(c => c.Id == "Catalog")
.AsEnumerable()
.Single();
// Use that Collection's SelfLink to query for a DocumentCollection by id
Document doc = client.CreateDocumentQuery(coll.SelfLink)
.Where(d => d.Id == "prd123")
.AsEnumerable()
.Single();
// Now that we have a doc, use it's SelfLink property to delete it
await client.DeleteDocumentAsync(doc.SelfLink);
答案 4 :(得分:0)
答案 5 :(得分:0)
我在nodejs中尝试使用deletebyId这个代码,它对我有用。
deleteDocumentById: function(params, callback) {
var self = this,
query= params.query,
collection = params.collection;
client.queryDocuments(collection._self, query, function(err, docs) {
if (err) {
return callback(err);
}
client.deleteDocument(docs[0]._self, docs[0], function(err, success) {
if (err) {
return callback(err);
}
callback(null, success);
});
});
}
答案 6 :(得分:0)
我一直在收到此错误:Microsoft.Azure.Documents.DocumentClientException:
具有指定ID的实体在系统中不存在。
删除的主要技巧是PartionKey id。您假设在PartionKey内部提供ID 就像在代码示例中一样。 我已经尝试了很多方法,但是我总是收到不同的错误...仅此解决方案对我有用。
await client.DeleteDocumentAsync(input[0].SelfLink,
new RequestOptions
{
PartitionKey = new PartitionKey(input[0].Id)
});
Hope this helps :)