如何在 1 个查询中从 Mongo DB 获取最小值和最大值? C#

Posted

技术标签:

【中文标题】如何在 1 个查询中从 Mongo DB 获取最小值和最大值? C#【英文标题】:How to get Min and Max values from Mongo DB in 1 query? 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();

【问题讨论】:

【参考方案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 分组。

【讨论】:

以上是关于如何在 1 个查询中从 Mongo DB 获取最小值和最大值? C#的主要内容,如果未能解决你的问题,请参考以下文章

如何在 db2 查询中从字符串中获取特定值

如何在Mongo DB中使用arrayElemAt获取当前文档值

在 MEAN Stack 应用程序中从 mongo db 检索数据

DB2 查询在 zend 的同一查询中从 2 个数据库中选择

Mongo 查询(可视化工具)

graphql.GraphQLSchema:使用啥类型的参数来获取查询以传递给 mongo db.collection.find 来解析查询