C#聚集在蒙哥

时间:2019-04-02 17:57:22

标签: c# mongodb

我正在尝试使用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,而其他则是一个字符串。

1 个答案:

答案 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();