mongodb - MongoDb 和 F#:如何获取集合中字段的最小值和最大值?
问题描述
我正在使用 C# MongoDb 驱动程序的最新(在撰写本文时)版本 (2.8)。我在 F# 中使用它。我想获取字段的最小值和最大值。
关于如何从 F# 使用 MongoDb(最新版本)似乎没有太多内容,所以如果我遗漏了什么,我深表歉意。
我唯一可以构建的是以下内容
let client = new MongoClient(connString)
let db = client.GetDatabase("AirQuality")
let col = db.GetCollection<ReadingValue>("ReadingValue")
let toDictionary (map : Map<_, _>) : Dictionary<_, _> = Dictionary(map)
let minb = ["$min", "$ReadingDate"] |> Map.ofList |> toDictionary
let maxb = ["$max", "$ReadingDate"] |> Map.ofList |> toDictionary
let grpb =
[
"_id", null
"min", minb
"max", maxb
] |> Map.ofList |> toDictionary
let aggb = ["$group", grpb] |> Map.ofList |> toDictionary
let doc = new BsonDocument(aggb)
let pl = new BsonDocumentPipelineStageDefinition<ReadingValue,string>(doc)
let epl = new EmptyPipelineDefinition<ReadingValue>()
let finalPipeline = epl.AppendStage(pl)
use result = col.Aggregate(finalPipeline)
但它会引发运行时错误Cannot deserialize a 'String' from BsonType 'Document'.
顺便说一句,我很惊讶在 F# 中使用 MongoDb 是多么尴尬。
发布关闭编辑:
这个问题是关于如何在 F# 中完成任务。链接到的问题迎合了其他一些语言(可能是 mongo shell)。在 F# 中无法使用这些技术(据我所知)。
解决方案
您至少可以使用以下dict
功能简化字典的构造:
let grpb =
dict [
"_id", null
"min", dict ["$min", "$ReadingDate"]
"max", dict ["$max", "$ReadingDate"]
]
let aggb = new BsonDocument(dict ["$group", grpb])
推荐阅读
- file - sh - 根据最大值将 0 附加到文件名
- git - Unity 2019 中软件包的版本控制
- nlp - 如何从词嵌入中恢复某个词出现在给定上下文中的可能性?
- javascript - .map() 参数未定义
- opencv - OpenCV dnn、OpenCL 和 Nvidia 显卡
- php - 对表上的 PHP/SQL 删除没有影响
- spring-boot - 如何将 p12 客户端证书与 spring feign 客户端一起使用
- c# - 使用 AJAX 传递模型和变量
- rest - 如何在 Jenkins 中通过 REST 更新 nextBuildNumber
- ruby-on-rails - 对 Shopify 应用进行身份验证 - 缺少“代码”参数