【问题标题】:CosmosDb Linq Count v3 SDKCosmosDb Linq Count v3 SDK
【发布时间】:2019-09-27 13:45:35
【问题描述】:

有谁知道如何(在 Azure CosmosDB 的新 v3 SDK 中)从 LINQ IQueryable 异步获取计数?

        var con = col.Container();
        IQueryable<T> q = con.GetItemLinqQueryable<T>(false);
        q = q.Where(d => d._type == type);
        int count = await q.CountAsync()///this is an SDK internal method and does not work

【问题讨论】:

  • 该功能目前正在开发中,预计将在不久的将来发布
  • 感谢您的回复。当 CosmosDb 说在不久的将来可能意味着未来 36 个月(或者如果他们找到想要发布的新 API 时更长????),我已经了解到。

标签: linq azure-cosmosdb azure-cosmosdb-sqlapi


【解决方案1】:

3.2 版 SDK 添加了异步聚合功能。

【讨论】:

    【解决方案2】:

    你可以试试下面的代码(根据你的实际情况做一些修改):

    var con = col.Container();
    IQueryable<T> q = con.GetItemLinqQueryable<T>(false);
    var iterator = q.Where(d => d._type == type).ToFeedIterator();
    int totalCount = 0;
    while (iterator.HasMoreResults)
    {
        var result = await iterator.ReadNextAsync();
        totalCount += result.Count();
    }
    

    【讨论】:

    • 这不是把服务器查询的所有文档都拉出来,在本地做统计吗?我希望在服务器上进行计数。
    • 投反对票。获取整个数据库进行计数是不正确的。它将带来大量流量(因此产生延迟和费用)。当数据库大小增加时,它也会因卷而中断。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 2019-12-01
    • 1970-01-01
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    相关资源
    最近更新 更多