【问题标题】:How to get Min and Max values from Mongo DB in 1 query? C#如何在 1 个查询中从 Mongo DB 获取最小值和最大值? C#
【发布时间】:2021-03-21 16:16:30
【问题描述】:

我可以在 2 个查询中得到最小值和最大值, 但是C#可以用1来做吗?

var max = (await collection.Sort(descendingDateTime).Limit(1).FirstOrDefaultAsync())
                        .GetValue(timeField).ToUniversalTime();

var min = (await collection.Sort(ascendingDateTime).Limit(1).FirstOrDefaultAsync())
                        .GetValue(timeField).ToUniversalTime();

【问题讨论】:

    标签: c# mongodb max min


    【解决方案1】:

    您可以使用如下所示的组聚合来执行此操作,但对于非常大的集合来说效率不高,因为分组会导致集合扫描并耗尽内存(它可能会达到 100mb 的分组限制)。最好使用 2 个查找查询,因为它可以使用索引。作为一项改进,您可以使用await Task.WhenAll(minTask, maxTask) 来同时运行这两个查询

    db.collection.aggregate(
    [
    
        {
            $group: {
                _id: null,
                Min: { $min: "$TimeField" },
                Max: { $max: "$TimeField" }
    
            }
        },
        {
            $project: {
                _id: 0
            }
        }
    
    ])
    

    也没有办法将上述聚合管道转换为强类型的 c# 查询,因为驱动程序不支持按空 id 分组。

    【讨论】:

      猜你喜欢
      • 2022-11-25
      • 1970-01-01
      • 2019-09-01
      • 1970-01-01
      • 2020-03-29
      • 2017-01-20
      • 2018-11-26
      • 2018-10-21
      • 2019-03-13
      相关资源
      最近更新 更多