Mongo Grouping并不是在DB级别发生的,并且不使用Mongo Aggregation Framework

时间:2012-05-24 23:11:39

标签: mongodb mongodb-.net-driver

Mongo Grouping不会在数据库级别发生,也不会将Mongo Aggregation Framework与以下代码一起使用。知道为什么吗?我必须创建CommandDocument和RunCommand,然后才使用聚合框架。

public IEnumerable<IGrouping<TKey, T>> GetItemsByQuery<TKey>(IMongoQuery query, FieldsBuilder fieldsBuilder, Func<T, TKey> groupbyKey)
{ 
    var mongoCursor = collection.FindAs<T>(query);
    mongoCursor.SetFields(fieldsBuilder);
    return mongoCursor.GroupBy(groupbyKey);
}

1 个答案:

答案 0 :(得分:0)

1)聚合框架仅支持MongoDB 2.1及更高版本的不稳定版本。它将在服务器2.2中得到正式支持。因此,除非您运行的是服务器2.1或更高版本,否则您将无法获得此功能服务器端。

2)驱动程序尚不支持聚合框架。您可以手动构建聚合并使用db.RunCommand执行它。

3)您正在调用MongoCursor的IEnumerable扩展方法。 MongoCursor确实知道你要求它做什么,因此,分组将在客户端进行。集合上有一个名为Group的方法,但你需要编写一些javascript来执行它。

总而言之,我们还没有很好的聚合故事。在服务器2.2中,这将改变,但它还没有。