首页 > 解决方案 > 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# 中无法使用这些技术(据我所知)。

标签: mongodbf#mongodb-.net-driver

解决方案


您至少可以使用以下dict功能简化字典的构造:

let grpb =
    dict [
        "_id", null
        "min", dict ["$min", "$ReadingDate"]
        "max", dict ["$max", "$ReadingDate"]
    ]
let aggb = new BsonDocument(dict ["$group", grpb])

推荐阅读