DocumentDB:按ID删除文档

时间:2014-08-22 17:17:24

标签: azure azure-cosmosdb

我正在使用Microsoft的一个名为DocumentDB的新数据库。现在我想通过ID删除文档,但我无法弄清楚,如何做到这一点。 DocumentDB中的删除操作需要自我链接,它们与我自己的ID不同。

using (var client = new DocumentClient(EndPoint, AuthKey))
{
    await client.DeleteDocumentAsync("**self-link here**");
}

我可以执行一个额外的查询来查找自我链接,然后传递它,但这需要两个操作而不是一个,这是我想要避免的。是否有更好的方法可以在不使用查询或存储过程的情况下通过ID删除条目?

7 个答案:

答案 0 :(得分:5)

*更新* 此功能现已实施

*原始答案*

不是今天,不是。您可以前往http://feedback.azure.com/forums/263030-documentdb并在那里投票选择该功能。

答案 1 :(得分:3)

以下是删除文档的方法

{                
var docUri = UriFactory.CreateDocumentUri(_documentDataBaseId, _documentCollectionId, docId);
                await _documentClient.DeleteDocumentAsync(docUri);
}

答案 2 :(得分:1)

答案 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)

由于这种情况没有解决方案,我建议检索现有集合中的所有文档以访问SelfLink和_rid值。 我刚刚启动了一个迷你包装器来访问Universal Apps中的DocumentDB,希望使用Xamarin的CrossPlatform:https://github.com/JorgeCupi/documentDB-Win10UAP-wrapper随时给我任何反馈,参与或请求一些必要的方法。

答案 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 :)