【发布时间】:2016-12-21 22:24:43
【问题描述】:
我正在尝试使用 2.2 版本的驱动程序来创建聚合查询,使用匹配阶段的 FilterDefintion 和组阶段的 ProjectionDefinition。但我不太确定如何创建 ProjectionDefinition。 API 是这样的:
FilterDefinition<T> filter=Builders<T>.Filter.Eq("Foo","Bar");
ProjectionDefinition<T> projection=...
IAggregateFluent<T> aggr = fileCol.Aggregate<T>()
.Match(filter)
.Group(projection);
匹配过滤器的工作方式与普通查找一样。但我不确定如何创建投影。
我可以只创建一个普通的 Bson 文档并将其放在那个阶段,它就可以工作。但是我正在尝试使用来自构建器的强类型对象创建一个一致的界面,这是我无法弄清楚如何做到这一点的一个地方。我认为这是可能的,因为 API 存在。
(小组阶段的Bson文件可以做成这样):
projection = new BsonDocument("_id","$SomeIdField").
Add("Result",new BsonDocument("$max","$someNumberField"));
编辑: 我所指的MongoDB API链接如下,我引用了相关部分。没有提供示例。我同意 'GroupDefinition' 会更有意义,但我没有写它 :-) 强类型,我的意思是用返回值键入,而不是 BsonDocument。
http://api.mongodb.com/csharp/current/html/M_MongoDB_Driver_AggregateFluentBase_1_Group__1.htm
块引用
public abstract IAggregateFluent<TNewResult> Group<TNewResult>(
ProjectionDefinition<TResult, TNewResult> group
)
参数
组 类型:MongoDB.Driver.ProjectionDefinitionTResult, TNewResult>
组投影。
类型参数
TNewResult
阶段结果的类型。
块引用
【问题讨论】:
-
ProjectionDefinition在分组阶段??这听起来不对。它本身就是一个舞台,就像比赛一样。顺便说一句BsonDocument是强类型的。如果它只是一个键值对BsonDocument是您的对象,我认为对于累加器运算符,您已经拥有可以使用的包装器。 -
@SagarReddy,我同意它令人困惑,但这就是 mdb 文档的方式。我已经链接了问题中的相关部分。
标签: c# mongodb aggregation-framework