【问题标题】:DocumentDB: Delete a document by IDDocumentDB:按 ID 删除文档
【发布时间】:2019-09-14 08:33:50
【问题描述】:

我正在使用 Microsoft 的一个名为 DocumentDB 的新数据库。现在我想按 ID 删除一个文档,但我不知道该怎么做。 DocumentDB中的删除操作需要自链接,和我自己的id不同。

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

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

【问题讨论】:

  • +1 与我想到的完全相同的问题;为什么使用 LINQ 提供程序的任何操作都需要到集合的 self-link。后者又需要一个到数据库的自链接
  • 有没有可能分享第二个操作的样子?你在做一个简单的“SELECT * FROM DOC WHERE ID=1”吗?

标签: azure azure-cosmosdb


【解决方案1】:

* UPDATE *此功能现已实现

* 原始答案 *

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

【讨论】:

【解决方案2】:

这是我删除文档的方式

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

【讨论】:

    【解决方案3】:

    【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      我已经在 nodejs 中尝试使用此代码删除byId,它对我有用。

      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】:

        我不断收到此错误: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 :)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多