日期范围上的C#MongoDB过滤器

日期范围上的C#MongoDB过滤器,c#,mongodb,datetime,mapreduce,C#,Mongodb,Datetime,Mapreduce,我是C#MongoDB驱动程序的新手,对筛选日期范围内的对象有疑问 我的收藏有很多条目,格式如下 { "_id" : ObjectId("51fa6ab684cc97132cfa4616"), "startDate" : ISODate("2013-07-16T00:00:00Z"), "endDate" : ISODate("2013-07-26T00:00:00Z"), "company" : "ABC" "amount" : 15 } 我想编写一个查询,

我是C#MongoDB驱动程序的新手,对筛选日期范围内的对象有疑问

我的收藏有很多条目,格式如下

{ 
   "_id" : ObjectId("51fa6ab684cc97132cfa4616"), 
   "startDate" : ISODate("2013-07-16T00:00:00Z"),
   "endDate" : ISODate("2013-07-26T00:00:00Z"),
   "company" : "ABC"
   "amount" : 15
}
我想编写一个查询,根据以下内容过滤集合:(“endDate”-“startDate”)<10,这意味着结果对象的结束日期应该小于开始日期的10天

我尝试使用MongoDB.Driver.Builders.Query类,但没有成功。它是否可以用MongoDB.Driver.Builders.Query.Where()进行架构?因为我想与其他查询联系起来,比如:

var amountQuery = Query.GT("amount", 10).LT(20);
var dateRangeQuery = // Query.XXX()....
var query = Query.And(amountQuery, dateRangeQuery );
var result = collection.Find(query);

或者还有其他方法吗?

如果不使用
$where
()运算符,则在使用传统的
查找
调用时,无法对数据执行诸如比较两个字段的值之类的操作。如果要使用
$where
,MongoDb无法利用
$where
操作中字段的索引。此外,它需要使用JavaScript引擎来执行代码,这会进一步影响性能

假设您使用的是MongoDb 2.4或更高版本:

var dateRangeQuery=Query.Where(
             new BsonJavaScript("this.endDate - this.startDate < 10"))
var dateRangeQuery=Query.Where(
新的BsonJavaScript(“this.endDate-this.startDate<10”))
<>但是,不要使用性能较差的<代码> $运算符,最好考虑改变您的数据模型,包括针对您通常需要的查询的字段。因此,您可能需要添加一个值为日期差的字段

可以使用聚合框架构建此查询,但它通常不是常见查询的正确解决方案,并且目前还不能处理返回的大型结果集和文档(因此得名)。例如,使用
$subtract
的示例