投影 MongoDb 在 F# 中查找的结果
Projecting results from MongoDb Find in F#
我正在尝试使用 MongoDB.Driver 和 return 查询 MongoDB 使用 mongo 投影的部分结果。
我已经想出了如何在没有投影的情况下进行查询,但不是部分结果。
这是我查找结果的函数:
let Find<'a> collectionName (filterDefinition: FilterDefinition<'a>) =
let collection = database.GetCollection<'a> collectionName
collection.Find(filterDefinition).ToEnumerable() |> List.ofSeq
这是我如何称呼它的例子:
let findByIdFilter id =
Builders<MyModel>.Filter.Eq((fun s -> s.id), id)
let results = Find collectionName (findByIdFilter id)
假设我的模型是这样的:
type MyInnerModel = {
zInner: bool
}
type MyModel = {
id: ObjectId
x: int
y: double
z: MyInnerModel
}
这些是我的预测:
type MyModelProjection1 = {
id: ObjectId
y: double
}
type MyModelProjection1 = {
id: ObjectId
x: int
z: MyInnerModel
}
如何针对以下情况构建查询:
- 查找匹配
(fun (m: MyModel) -> 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 })
然后您可以通过以下方式使用它们:
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
我正在尝试使用 MongoDB.Driver 和 return 查询 MongoDB 使用 mongo 投影的部分结果。
我已经想出了如何在没有投影的情况下进行查询,但不是部分结果。 这是我查找结果的函数:
let Find<'a> collectionName (filterDefinition: FilterDefinition<'a>) =
let collection = database.GetCollection<'a> collectionName
collection.Find(filterDefinition).ToEnumerable() |> List.ofSeq
这是我如何称呼它的例子:
let findByIdFilter id =
Builders<MyModel>.Filter.Eq((fun s -> s.id), id)
let results = Find collectionName (findByIdFilter id)
假设我的模型是这样的:
type MyInnerModel = {
zInner: bool
}
type MyModel = {
id: ObjectId
x: int
y: double
z: MyInnerModel
}
这些是我的预测:
type MyModelProjection1 = {
id: ObjectId
y: double
}
type MyModelProjection1 = {
id: ObjectId
x: int
z: MyInnerModel
}
如何针对以下情况构建查询:
- 查找匹配
(fun (m: MyModel) -> 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 })
然后您可以通过以下方式使用它们:
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