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

MongoDB字段值比较:如何在$where查询中使用正则(含C#实现)

在MongoDB中使用$where实现字段间正则匹配及C#实现

嘿,我来帮你搞定这个问题!你已经知道用$where做字段等值比较了,要实现类似“字段间正则匹配”的效果,核心是在$where的JavaScript逻辑里利用正则表达式的方法,下面分两种常见场景说明:

MongoDB Shell 写法

场景1:检查field2的值是否包含field1的内容(类似SQL的 field2 LIKE '%' || field1 || '%')

如果你的需求是判断field2里包含field1的内容,可以用String.includes()或者正则的test()方法:

db.collection.find({
  $where: "this.field2.includes(this.field1)"
})

要是需要忽略大小写这类额外规则,用正则会更灵活:

db.collection.find({
  $where: "new RegExp(this.field1, 'i').test(this.field2)"
})

场景2:用field1的值作为正则表达式匹配field2

如果field1本身就是一个正则模式字符串(比如"foo.*"),要匹配field2的值,可以直接构造RegExp对象:

db.collection.find({
  $where: "new RegExp(this.field1).test(this.field2)"
})

注意:$where会逐文档执行JavaScript代码,无法利用索引,在数据量较大的集合上查询性能会很差,非必要不建议使用。如果能通过普通查询操作符组合实现需求,优先用后者。

C# 对应实现

在C#的MongoDB驱动中,你需要用BsonJavaScript来封装$where的逻辑,下面是对应上面场景的代码:

场景1:field2包含field1(忽略大小写)

var filter = new BsonDocument("$where", new BsonJavaScript("new RegExp(this.field1, 'i').test(this.field2)"));
var result = collection.Find(filter).ToList();

场景2:用field1作为正则匹配field2

var filter = new BsonDocument("$where", new BsonJavaScript("new RegExp(this.field1).test(this.field2)"));
var result = collection.Find(filter).ToList();

如果你的需求是field1匹配field2的内容(和场景1反过来),只需要调换字段位置即可:

var filter = new BsonDocument("$where", new BsonJavaScript("new RegExp(this.field2).test(this.field1)"));

内容的提问来源于stack exchange,提问作者Mehrdad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:56:57