Mongo,在linq查询中使用totalmilliseconds

时间:2016-12-12 09:25:35

标签: c# mongodb linq mongodb-query mongodb-.net-driver

我有以下linq功能:

TimeSpan lInterval = aEndTime - aBeginTime;
int lIntervalInt = (int)Math.Round(lInterval.TotalMilliseconds/(30*60*1000));

var meh = lCollection.Aggregate()
            .Match(lValue => lValue.Tag == LTag._id)
            .Match(lValue => lValue.TimeStamp >= aBeginTime)
            .Match(lValue => lValue.TimeStamp <= aEndTime)
            .Group(lValue => new {Period = (lValue.TimeStamp-aBeginTime).TotalMilliseconds/lIntervalInt, TimeStamp = lValue.TimeStamp }, g =>
                new
                {
                    Key = g.Key,
                    avgValue = g.Average(x => x.Value)
                })
            .Project(r => new cValueDouble()
            {
                TimeStamp = r.Key.TimeStamp,
                Tag = LTag._id,
                Value = r.avgValue
            });

我的收藏品如下:

ObjectId _id;
DateTime TimeStamp;
ObjectId Tag;
double Value;

我要做的是通过特定的用户定义时间间隔聚合值。例如,每两分钟记录一次值,但我希望在30分钟内检索平均数据。 但问题似乎是mongo驱动程序不支持timespan.TotalMilliseconds命令。尝试运行代码时出现以下错误:

  

未处理的类型&#39; System.NotSupportedException&#39;发生在MongoDB.Driver.dll

     

其他信息:表达式树中的System.TimeSpan类型的成员TotalMilliseconds({document} {TimeStamp} - 1/1/2010 12:00:00 AM).TotalMilliseconds无法翻译。

还有其他命令我可以尝试这样做吗?或许是一种完全不同的方法。我更喜欢在mongo中进行聚合,而不是在机器上进行本地聚合。

EDIT 有没有我可以将mongo文档时间戳转换为某种时间格式。我只需要持续引用一段时间。

1 个答案:

答案 0 :(得分:0)

我认为这是因为它是Mongo不理解的TimeSpan类型对象。在查询中使用之前,请尝试将其转换为双精度数,然后才能正常工作...

作为旁注:为什么你的变量以'l'或'a'为前缀?我有时看到这个并且无法理解推理