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

MongoDB C#驱动如何实现判断字段值包含在指定字符串的查询

MongoDB C# 驱动实现字段值被指定字符串包含的查询方法

报错原因

MongoDB.Driver的LINQ提供器仅支持解析x => x.字段.Contains(搜索内容)类逻辑(用于判断字段内容包含给定值),你使用的x => 搜索内容.Contains(x.字段)为反向判断逻辑,无法被直接翻译成MongoDB原生查询语句,因此会抛出不支持异常。

推荐实现方案(服务端执行,性能最优)

使用MongoDB的$expr运算符配合$indexOfCP方法构建查询条件:如果搜索文本中包含ItemName的值,$indexOfCP会返回匹配的起始下标(≥0),否则返回-1。

// 搜索文本
string SearchText = "你的指定搜索字符串";

// 构建查询过滤器
var filter = new BsonDocument("$expr", 
    new BsonDocument("$gte", 
        new BsonArray 
        { 
            new BsonDocument("$indexOfCP", new BsonArray { SearchText, "$ItemName" }), 
            0 
        }
    )
);

// 执行查询
var items = Db.Products.Find(filter).ToList();

如果需要不区分大小写匹配,可将两个对比值统一转为小写后再判断:

string lowerSearchText = SearchText.ToLower();
var filter = new BsonDocument("$expr", 
    new BsonDocument("$gte", 
        new BsonArray 
        { 
            new BsonDocument("$indexOfCP", 
                new BsonArray 
                { 
                    lowerSearchText, 
                    new BsonDocument("$toLower", "$ItemName") 
                }
            ), 
            0 
        }
    )
);

小数据量临时方案(不推荐)

仅在集合数据量极小时可使用,该方式会加载全表数据到内存后过滤,数据量大时性能极差:

var items = Db.Products.AsEnumerable().Where(x => SearchText.Contains(x.ItemName)).ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:24:03