首页 > 解决方案 > 检查文本字段的一部分是否包含在字符串数组中

问题描述

我有一组要在用户集合中过滤的搜索词(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# 驱动程序实现这一点?

标签: c#.netmongodbmongodb-querymongodb-.net-driver

解决方案


您可以尝试将所有搜索词合并到一个正则表达式中并在不使用的情况下进行评估$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();

推荐阅读