簡體   English   中英

如何從 C# 中的 Cosmos DB 讀取布爾值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM