如何在C#中使用MongoDB Driver实现find查询多条件过滤
问题原因
你编写的C#代码核心存在两处逻辑错误:
- 不等查询构造错误:
Builders.Filter.Eq是全等判断方法,嵌套$ne操作符后生成的查询结构为{status: {$eq: {$ne: "APPROVED"}}},和预期逻辑完全不符 - 正则查询构造+参数错误:用
Eq嵌套$regex生成的查询结构为{storyID: {$eq: {$regex: "bbjfnfn-*"}}},不符合查询要求,同时你代码里的正则字符串多写了fn后缀,和原始查询的bbjfn-*不一致
修正方案
你可以直接使用驱动内置的Filter方法实现需求,修正后的代码如下:
IMongoDatabase database = MongoClient.GetDatabase(Program.Settings.MongoDB.Database); IMongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>("comments"); var filter = Builders<BsonDocument>.Filter.Ne("status", "APPROVED") & Builders<BsonDocument>.Filter.Regex("storyID", new BsonRegularExpression("bbjfn-*")); var results = await collection.FindAsync(filter);
如果你习惯原生MongoDB查询的写法,也可以直接用BsonDocument构造Filter:
var filter = new BsonDocument { { "status", new BsonDocument("$ne", "APPROVED") }, { "storyID", new BsonDocument("$regex", "bbjfn-*") } };
内容的提问来源于stack exchange,提问作者NestedCodeblocksFTW
相关产品推荐
相关产品推荐

