WHERE语句中的MongoDB Linq日期差异



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

public class A
{
    public DateTime From;
    public DateTime To;
}

如果我想得到所有的对象,其中From和Two只相隔2小时,我会写这样的东西:

_db.GetCollection<A>("A").Find( (x.To-x.From).TotalMinutes <= 120).ToList();

var Minutes120 = new TimeSpan(2, 0, 0);
_db.GetCollection<A>("A").Find( (x.To-x.From) <= Minutes120).ToList();

甚至

var Minutes120 = new TimeSpan(0, 120, 0).Ticks;
_db.GetCollection<A>("A").Find( (x.To.Ticks-x.From.Ticks) <= Minutes120).ToList();

然而,以上这些都不起作用。我总是得到"…不受支持。"错误。

有没有什么方法可以像上面那样进行搜索,而不必将时差和日期一起保存在单独的房产中?虽然我只在一个查询中需要它,但节省时差似乎有点过头了。

在mongodb的查询引用中没有算术运算符。这意味着使用此类运算符的查询无法转换为MongoDB查询。

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

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

2) 使用MongoDB引擎的聚合方法,这是一种可能的查询方式:在From和to字段上进行聚合,可能使用$sum或其他方法,在120分钟的要求下,在结果上以$match结束。请记住,聚合的输出实际上不再是您的类(因为您引入了一个新成员)。这是一篇关于使用聚合函数进行搜索和计算的好文章。

最新更新