我有一个要在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#驱动程序来实现?
答案 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();