首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WHERE语句中的MongoDB Linq日期差

WHERE语句中的MongoDB Linq日期差
EN

Stack Overflow用户
提问于 2016-05-04 11:18:19
回答 1查看 1.1K关注 0票数 2

我有一个类,它包含两个DateTime变量,"From“和"To":

代码语言:javascript
复制
public class A
{
    public DateTime From;
    public DateTime To;
}

如果我想得到所有的对象,其中距离只有两个小时,我会写这样的东西:

代码语言:javascript
复制
_db.GetCollection<A>("A").Find( (x.To-x.From).TotalMinutes <= 120).ToList();

代码语言:javascript
复制
var Minutes120 = new TimeSpan(2, 0, 0);
_db.GetCollection<A>("A").Find( (x.To-x.From) <= Minutes120).ToList();

甚至是

代码语言:javascript
复制
var Minutes120 = new TimeSpan(0, 120, 0).Ticks;
_db.GetCollection<A>("A").Find( (x.To.Ticks-x.From.Ticks) <= Minutes120).ToList();

然而,上述任何一项工作都没有。我总是得到"...is不支持。“错误。

是否有任何方法可以进行上述搜索,而不必将时间差与日期一起保存在单独的属性中?虽然我只在一个查询中需要时差,但节省时间差似乎有点过分。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-04 12:01:01

mongo db的查询引用中没有算术运算符。这意味着使用这些运算符的查询不能转换为MongoDB查询。

因此,添加成员的替代方法是,

1)展开查询,并将表达式放在ToList()之后的Where子句中(内存中.NET计算所有差异的比较)

2)使用聚合方法的MongoDB引擎(这是一种可能的查询方式):在From和字段上进行聚合,可能是使用$sum之类的,最后以$match结束,以120分钟的要求结束。请记住,聚合的输出是不再是你的阶级了 (正如您引入了一个新成员一样)。这里是一篇关于使用聚合函数进行搜索和计算的优秀文章。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37026297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档