我正在尝试使用C#中的聚合从mongo的日志中获取统计信息,但是我总是会收到错误:
组聚合字段“ RecordDate”必须定义为表达式 在对象内部。
这是我的代码,有人可以告诉我集聚在哪里吗?
IMongoCollection<LogRecord> myCollection = MongoClient.GetDatabase("DatabaseName").GetCollection<LogRecord>("CollectionName");
List<GroupedData> logSats = myCollection.Aggregate<LogRecord>()
.Group<LogRecord, StatsKeys, GroupedData>(
t => new StatsKeys
{
RecordDate= t.RecordDate.ToString("%Y-%m-%d"),
Type = t.Type,
User = t.UserName
},
g => new GroupedData
{
count = g.Count(),
Success = g.Count(t => !t.Error),
Erros = g.Count(t => t.Error),
RecordDate = g.Key.RecordDate,
Type = g.Key.Type,
User = g.Key.User,
AvgTime = g.Average(t => t.FirstStepTime + t.SecondStepTime)
}
).ToList();
LogRecord中的RecordDate是DateTime,而其他则是一个字符串。
答案 0 :(得分:1)
按照Greg Stanley的建议,我在GroupedData类中添加了一个StatsKeys变量(在本例中为“ Key”),并使用Key = g.Key来代替。
IMongoCollection<LogRecord> myCollection = MongoClient.GetDatabase("DatabaseName").GetCollection<LogRecord>("CollectionName");
List<GroupedData> logSats = myCollection.Aggregate<LogRecord>()
.Group<LogRecord, StatsKeys, GroupedData>(
t => new StatsKeys
{
RecordDate= t.RecordDate.ToString("%Y-%m-%d"),
Type = t.Type,
User = t.UserName
},
g => new GroupedData
{
count = g.Count(),
Success = g.Count(t => !t.Error),
Erros = g.Count(t => t.Error),
Key = g.Key,
AvgTime = g.Average(t => t.FirstStepTime + t.SecondStepTime)
}
).ToList();