我正在使用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();
有人可以指导我继续吗? 谢谢! 的问候,
答案 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();