You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 使用MongoDB时二进制运算符如何拼接多个查询条件?

核心逻辑说明

你看到的&、|不是C#原生的布尔运算符或位运算符,是MongoDB C#驱动为FilterDefinition<T>类型自定义重载的运算符,作用是将多个过滤条件按照逻辑规则拼接为MongoDB可识别的查询结构。

运算符对应规则

  • 重载&运算符:对应MongoDB的$and逻辑,要求运算符两侧的条件同时满足
  • 重载|运算符:对应MongoDB的$or逻辑,要求运算符两侧的条件至少满足一个
  • &=是&运算加赋值的简写,等价于filter = filter & 右侧条件

示例代码逐行拆解

你给出的示例最终会拼接出同时满足三个要求的查询:A等于"1",B等于"4"或"5",C等于"7"。

  1. 第一行初始化基础条件
var filter = Builders<User>.Filter.Eq(x => x.A, "1");

等价于MongoDB原生查询:

{ "A": "1" }
  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" } ]
}
  1. 第三行拼接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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:39:04