MongoDB中的运算符,可以使用官方.NET驱动程序通过多过滤器执行查询

问题描述 投票:2回答:2

我正在使用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);

仅使用一个过滤器,搜索就不会出现问题,如下所示,但是我不知道如何包括这三个过滤器。

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

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

c# .net mongodb mongodb-.net-driver
2个回答
5
投票

您可以简单地做:

collection.Find(filter1 & filter2 & filter3)

或替代:

collection.Find(Builders<BsonDocument>.Filter.And(filter1, filter2, filter3))

2
投票

使用一个&

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();
© www.soinside.com 2019 - 2024. All rights reserved.