C# 使用MongoDB时二进制运算符如何拼接多个查询条件?
核心逻辑说明
你看到的&、|不是C#原生的布尔运算符或位运算符,是MongoDB C#驱动为FilterDefinition<T>类型自定义重载的运算符,作用是将多个过滤条件按照逻辑规则拼接为MongoDB可识别的查询结构。
运算符对应规则
- 重载
&运算符:对应MongoDB的$and逻辑,要求运算符两侧的条件同时满足 - 重载
|运算符:对应MongoDB的$or逻辑,要求运算符两侧的条件至少满足一个 &=是&运算加赋值的简写,等价于filter = filter & 右侧条件
示例代码逐行拆解
你给出的示例最终会拼接出同时满足三个要求的查询:A等于"1",B等于"4"或"5",C等于"7"。
- 第一行初始化基础条件
var filter = Builders<User>.Filter.Eq(x => x.A, "1");
等价于MongoDB原生查询:
{ "A": "1" }
- 第二行拼接B字段的或条件
filter &= (Builders<User>.Filter.Eq(x => x.B, "4") | Builders<User>.Filter.Eq(x => x.B, "5"));
先执行括号内的|运算,拼接出B字段的或条件,再用&=和原有条件做逻辑与拼接,此时filter等价于:
{ "A": "1", "$or": [ { "B": "4" }, { "B": "5" } ] }
- 第三行拼接C字段的与条件
filter = filter & Builders<User>.Filter.Eq(x => x.C, "7");
再和C等于"7"的条件做逻辑与拼接,最终的等价原生查询为:
{ "A": "1", "$or": [ { "B": "4" }, { "B": "5" } ], "C": "7" }
补充说明
这些运算符本质是驱动提供的语法糖,完全可以用Builders.Filter.And()、Builders.Filter.Or()方法实现同等效果,不会有任何功能差异。
内容的提问来源于stack exchange,提问作者Guerrilla
相关产品推荐
相关产品推荐

