private GroupArgs BuildBsonQuery(BsonObjectId fromBsonId, BsonObjectId toBsonId) { var query = Query <LogEntry> .Where(r => r.BsonObjectId >= fromBsonId && r.BsonObjectId <= toBsonId); var groupArgs = new GroupArgs { Initial = new BsonDocument(new BsonElement(CountKey, new BsonInt32(0))), KeyFields = new GroupByBuilder(new[] { LevelKey }), ReduceFunction = new BsonJavaScript( string.Format("function ( curr, result ) {{ result.{0}++; }}", CountKey)), Query = query }; return(groupArgs); }
/// <summary> /// GroupByCount /// </summary> /// <param name="collectionName"></param> /// <param name="FieldName"></param> /// <returns></returns> public static Dictionary <string, int> GroupCount(string collectionName, string FieldName, IMongoQuery query = null) { MongoCollection col = GetDatabaseByType(_defaultDatabaseName).GetCollection(collectionName); GroupArgs g = new GroupArgs(); var groupdoc = new GroupByDocument(); groupdoc.Add(FieldName, true); g.KeyFields = groupdoc; g.ReduceFunction = new BsonJavaScript("function(obj,prev){ prev.count++;}"); g.Initial = new BsonDocument().Add("count", 0); if (query != null) { g.Query = query; } var GroupResult = col.Group(g); var result = new Dictionary <string, int>(); foreach (BsonDocument item in GroupResult) { result.Add(item.GetElement(FieldName).Value.ToString(), (int)item.GetElement("count").Value.AsDouble); } return(result); }
public virtual IEnumerable <BsonDocument> Group(GroupArgs args) { return(this.context.GetCollection <TEntity>().Group(args)); }