如何在 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#的主要内容,如果未能解决你的问题,请参考以下文章
如何在Mongo DB中使用arrayElemAt获取当前文档值
在 MEAN Stack 应用程序中从 mongo db 检索数据
DB2 查询在 zend 的同一查询中从 2 个数据库中选择
graphql.GraphQLSchema:使用啥类型的参数来获取查询以传递给 mongo db.collection.find 来解析查询