我有以下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文档时间戳转换为某种时间格式。我只需要持续引用一段时间。
答案 0 :(得分:0)
我认为这是因为它是Mongo不理解的TimeSpan类型对象。在查询中使用之前,请尝试将其转换为双精度数,然后才能正常工作...
作为旁注:为什么你的变量以'l'或'a'为前缀?我有时看到这个并且无法理解推理