c# - 检查文本字段的一部分是否包含在字符串数组中
问题描述
我有一组要在用户集合中过滤的搜索词(userSearchTerms)(用户 = _id + 名称,例如:比尔·盖茨、保罗·艾伦、萨蒂亚·纳德拉)。
userSearchTerms = string[] {"Bil", "Pau", "Saty"};
在 mongodb 中,我设法像这样查询:
db.users.find({ name: { $in: [ /Bil/i, /Pau/i, /Saty/i ] } })
但我无法使用 C# 驱动程序(当前使用 v2.4.4)实现这一点:
filter.Where(u => userSearchTerms.Any(st => u.Name.Contains(st)));
但我得到这个前:ArgumentException:'不支持的过滤器:Any(值(System.String []).Where({document}{Name}.Contains({document})))。
问:有什么方法可以使用 C# 驱动程序实现这一点?
解决方案
您可以尝试将所有搜索词合并到一个正则表达式中并在不使用的情况下进行评估$in
:
// Produces a regex like: (Bil|Pau|Saty)
string regex = $"^({string.Join("|", userSearchTerms)})";
var filter = new FilterDefinitionBuilder<User>()
.Regex(u => u.Name, new BsonRegularExpression(regex, "i"));
var users = collection.Find(filter).ToEnumerable();
推荐阅读
- java - 带有ssl的spring webclient抛出NPE
- angular - 如何在重新加载时保留查询字符串
- android - Android - 在模拟器中没有信息的情况下启动 CameraIntent 活动以导致结果崩溃
- .net - 具有应用程序角色的守护程序应用程序无法访问具有相同角色的已定义 AuthorizeAttribute 的端点
- python - 从 Python 脚本中提取 splukn 数据
- flutter - Flutter MVVM 堆叠
- angular - Angular - 无法将 API 中的数据显示到模板中
- vue.js - 如何构造中间组件
- java - 如何从 cosmos db 中的现有表访问分区键
- python - Stockfish 国际象棋引擎在 Heroku 上得到:“EngineTerminatedError:引擎进程意外死亡”