.net F中MongoDb Find的投影结果#

.net F中MongoDb Find的投影结果#,.net,mongodb,f#,mongodb-query,mongodb.driver,.net,Mongodb,F#,Mongodb Query,Mongodb.driver,我尝试使用MongoDB查询,并使用mongo投影返回部分结果 我已经知道了如何在没有投影的情况下进行查询,但不是部分结果。 这是我查找结果的函数: let Find)= 让collection=database.GetCollection m.z.zInner=false)投影到MyModelProjection1 查找匹配(fun(m:MyModel)->m.x=5)并投影到MyModelProjection2的文档 查找所有投影到MyModelProjection1或MyModelProj

我尝试使用MongoDB查询,并使用mongo投影返回部分结果

我已经知道了如何在没有投影的情况下进行查询,但不是部分结果。 这是我查找结果的函数:

let Find)=
让collection=database.GetCollection m.z.zInner=false)
投影到
MyModelProjection1
  • 查找匹配
    (fun(m:MyModel)->m.x=5)
    并投影到
    MyModelProjection2的文档
  • 查找所有投影到
    MyModelProjection1
    MyModelProjection2

  • 您可以这样定义投影:

    let projection1 =
        Builders<MyModel>.Projection.Expression(fun model ->
            { id = model.id; y = model.y })
    
    let projection2 =
        Builders<MyModel>.Projection.Expression(fun model ->
            { id = model.id; x = model.x; z = model.z })
    

    令人惊叹的!那绝对有效!你知道如何构造一个类似的结果排序定义吗
    Builders.Sort
    似乎没有
    .Expression
    。它有
    升序(…)
    (或
    降序(…)
    ),需要
    字段:字段定义->排序定义
    ,但我不知道如何构造这些…你可以试试,例如,
    让排序定义=Builders.Sort.Descending(有趣的文档->doc.x:>obj)
    有意义。我希望会有更好的方法,不隐藏类型。非常感谢。
        let one =
            collection
                .Find(fun m -> m.z.zInner = false)
                .Project(projection1).ToEnumerable() |> List.ofSeq
    
        let two =
            collection
                .Find(fun m -> m.x = 5)
                .Project(projection2).ToEnumerable() |> List.ofSeq
    
        let three =
            collection
                .Find(fun _ -> true)
                .Project(projection1).ToEnumerable() |> List.ofSeq
    
        let four =
            collection
                .Find(fun _ -> true)
                .Project(projection1).ToEnumerable() |> List.ofSeq