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);
}
答案 0 :(得分:0)
1)聚合框架仅支持MongoDB 2.1及更高版本的不稳定版本。它将在服务器2.2中得到正式支持。因此,除非您运行的是服务器2.1或更高版本,否则您将无法获得此功能服务器端。
2)驱动程序尚不支持聚合框架。您可以手动构建聚合并使用db.RunCommand执行它。
3)您正在调用MongoCursor的IEnumerable扩展方法。 MongoCursor确实知道你要求它做什么,因此,分组将在客户端进行。集合上有一个名为Group的方法,但你需要编写一些javascript来执行它。
总而言之,我们还没有很好的聚合故事。在服务器2.2中,这将改变,但它还没有。