c# - 读取可能不存在的 Azure DocumentDB 文档

标签 c# .net azure azure-cosmosdb

我可以像这样从 Azure DocumentDB 查询单个文档:

var response = await client.ReadDocumentAsync( documentUri );

如果文档不存在,则会抛出 DocumentClientException。在我的程序中,我遇到了该文档可能存在也可能不存在的情况。有没有办法在不使用 try-catch 的情况下查询文档,并且无需对服务器进行两次往返,首先查询文档,然后检索文档(如果存在)?

最佳答案

遗憾的是,没有其他方法,要么处理异常,要么进行两次调用,如果您选择第二条路径,这是一种检查文档存在的性能驱动方法:

public bool ExistsDocument(string id)
{
    var client = new DocumentClient(DatabaseUri, DatabaseKey);
    var collectionUri = UriFactory.CreateDocumentCollectionUri("dbName", "collectioName");
    var query = client.CreateDocumentQuery<Microsoft.Azure.Documents.Document>(collectionUri, new FeedOptions() { MaxItemCount = 1 });
    return query.Where(x => x.Id == id).Select(x=>x.Id).AsEnumerable().Any(); //using Linq
}

客户端应该在所有数据库访问方法之间共享,但我在那里创建它是为了有一个自动充足的示例。

new FeedOptions () {MaxItemCount = 1}将确保查询针对 1 个结果进行优化(我们实际上不需要更多)。

Select(x=>x.Id)将确保不返回其他数据,如果您不指定它并且文档存在,它将查询并返回所有信息。

关于c# - 读取可能不存在的 Azure DocumentDB 文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35482455/

相关文章:

c# - 有没有办法使用键搜索以多种方式搜索字典?

Azure:CLI OData 筛选器字符串匹配

azure - 追加到 CloudBlockBlob 流

c# - 为什么默认情况下 Switch 语句的 Fall-Through?

c# - 如何对 SQLite 数据库进行 LINQ 查询?

.net - 获取 .NET 中的日期和时间

c# - 在运行时检测使用 "dynamic"关键字作为类型参数

google-chrome - Asp.net 表单例份验证 Cookie 问题

c# - 没有 EntityKey 的 MemberwiseClone

c# - WPF 将 DataGridTextColumn 的背景颜色绑定(bind)到按行着色