使用And运算符可以使用多个过滤器执行查询

时间:2018-05-15 12:45:09

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

我正在使用MongoDB 3.2,我想使用官方.NET driver(2.6)

从C#进行查询

使用Robomongo执行搜索,正确的查询是:

db.getCollection('collection1').find({ $and: [ { type: "ws128" }, { tsend: { $gte: ISODate("2018-05-11T14:39:33.000Z"), $lt: ISODate("2018-05-11T14:39:40.000Z") } }  ] })

我想查找所有包含 type = ws128 键的文档,以及查询中显示的变量 tsend介于两个日期之间。

在C#中,我有如下所示定义的过滤器,但我不知道如何进行查询:

DateTime datetimestart =  new DateTime(2018, 5, 11, 14, 39, 33);
DateTime datetimeend =  new DateTime(2018, 5, 11, 14, 39, 40);
var filter1 = Builders<BsonDocument>.Filter.Eq("type", "ws128");
var filter2 = Builders<BsonDocument>.Filter.Gte("tsend", datetimeend);
var filter3 = Builders<BsonDocument>.Filter.Lt("tsend", datetimestart);

使用单个过滤器,搜索没有问题,如下所示,但我不知道如何包含3个过滤器。

var cursor = collection.Find(filter1).ToCursor();

有人可以指导我继续吗? 谢谢! 的问候,

2 个答案:

答案 0 :(得分:3)

您可以这样做:

integrate

或者:

expectation_value

答案 1 :(得分:2)

使用单个&amp;

DateTime datetimestart =  new DateTime(2018, 5, 11, 14, 39, 33);
DateTime datetimeend =  new DateTime(2018, 5, 11, 14, 39, 40);
var filter1 = Builders<BsonDocument>.Filter.Eq("type", "ws128");
var filter2 = Builders<BsonDocument>.Filter.Gte("tsend", datetimeend);
var filter3 = Builders<BsonDocument>.Filter.Lt("tsend", datetimestart);
var andFilter = filter1 & filter2 & filter3;

var cursor = collection.Find(andFilter).ToCursor();

我可能会以不同的方式编写代码。我发现它更容易阅读和写作:

DateTime datetimestart =  new DateTime(2018, 5, 11, 14, 39, 33);
DateTime datetimeend =  new DateTime(2018, 5, 11, 14, 39, 40);

var builder = Builders<BsonDocument>.Filter;
var filter1 = builder.Eq("type", "ws128");
var filter2 = builder.Gte("tsend", datetimeend);
var filter3 = builder.Lt("tsend", datetimestart);

var cursor = collection.Find(filter1 & filter2 & filter3).ToCursor();