检查文本字段的一部分是否包含在字符串数组中

时间:2018-08-08 14:23:43

标签: c# .net mongodb mongodb-query mongodb-.net-driver

我有一个要在Users集合中过滤的搜索词(userSearchTerms)数组(用户= _id +名称,例如:Bill Gates,Paul Allen,Satya Nadella)。

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(value(System.String [])。Where({document} {Name} .Contains({document}))))。'

问:,有什么方法可以使用C#驱动程序来实现?

1 个答案:

答案 0 :(得分:0)

您可以尝试将所有搜索词合并到一个正则表达式中,然后不使用$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();