![](/img/trans.png)
[英]how to read derived object from cosmos db with document db client from C#
[英]How to read boolean value from Cosmos DB from C#
我在documentdb
有一些具有以下結構的數據:
{
id:1,
key:"USA",
states:["New York","New Jersey", "Ohio", "Florida" ]
}
我需要檢查,如果“加利福尼亞”是從使用C#查詢上述文件中提供CreateDocumentQuery
返回真/假。 如何從CreateDocumentQuery
讀取boolean
值?
假設你有一個看起來像這樣的 DTO:
class Item
{
[JsonProperty("id")]
public string Id { get; set; }
[JsonProperty("key")]
public string Key { get; set; }
[JsonProperty("states")]
public List<string> States { get; set; }
}
您可以對數組使用Contains
方法來檢查該值是否存在。 LINQ to SQL 轉換器會將其轉換為 sql 查詢。 您所要做的就是在 where 子句中添加任何其他謂詞並運行它。 我故意只選擇文檔的 Id 來保存一些 RU 並使其運行得更快。
如果您在 where 子句中的表達式中添加分區鍵,或者您知道分區鍵值是什么,請在提要選項中設置它以提高性能。 不建議將跨分區查詢作為日常工作流程的一部分。
您可以使用 DocumentQueryable 的CountAsync()
擴展方法來獲取與謂詞匹配的文檔數,然后執行 a > 0
以查看它是否存在。
這是代碼:
public async Task<bool> ArrayContainsAsync()
{
var documentClient = new DocumentClient(new Uri("https://localhost:8081"), "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==");
var collectionUri = UriFactory.CreateDocumentCollectionUri("dbname", "collectionName");
return (await documentClient
.CreateDocumentQuery<Item>(collectionUri, new FeedOptions { EnableCrossPartitionQuery = true })
.Where(x => x.States.Contains("California")).CountAsync()) > 0;
}
但是,下面的代碼將控制查詢並在第一次匹配時退出,這將比上面的代碼更有效。
public async Task<bool> ArrayContainsAsync()
{
var documentClient = new DocumentClient(new Uri("https://localhost:8081"), "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==");
var collectionUri = UriFactory.CreateDocumentCollectionUri("dbname", "collectionName");
var query = documentClient
.CreateDocumentQuery<Item>(collectionUri, new FeedOptions { EnableCrossPartitionQuery = true })
.Where(x => x.States.Contains("California")).Select(x=> x.Id).AsDocumentQuery();
while (query.HasMoreResults)
{
var results = await query.ExecuteNextAsync();
if (results.Any())
return true;
}
return false;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.