我的用户集合将包含这样的数据
{ name:"steve" }, { name:"david" }, { name:"sana" }, { name:"robert" }
我的查询就像这样
var myCollections= _database.GetCollection<RawBsonArray>("users");
var query = Query.Matches("name", "Steve Sam Steward Savior Sana");
myCollections.Find(query);
以上查询将找到与“Steve Sam Steward Savior Sana”匹配的所有用户名。 但我希望任何用户名与“Steve Sam Steward Savior Sana”中的任何单词匹配
如何使上述查询反向工作
预期结果为{ name:"steve" },{ name:"sana" }
我做了ForEach
循环,但我不确定这是否正确。
这就是我想要实现的目标
_users.Any(x => "Steve Sam Steward Savior Sana".ToLower().Contains(x.name.ToLower()));
答案 0 :(得分:0)
我认为您需要的是$in
运算符。虽然,我不熟悉C#,但这是如何在shell中完成的:
db.users.find({"name":{$in:["Steve", "Sam", "Steward", "Savior", "Sana"]}})
我希望这可以帮助你在C#中提出相应的内容。
答案 1 :(得分:0)
您可以使用:
var usernames = new List<string>() {@"Steve", @"Sam", @"Steward", @"Savior", @"Sana"};
// regex token list
var tokens = new List<string>();
for (var i = 0; i < usernames.Count; i++)
{
// create the regex format
var userRegex = string.Format("^{0}", usernames[i]);
tokens.Add(userRegex);
}
var searchByUsernameRegex = string.Join(@"|", tokens);
Collection.Find(Query.Matches("Username", new BsonRegularExpression(searchByUsernameRegex))).ToList();
或强>
// regex token list
var tokens = new List<string>();
for (var i = 0; i < users.Count; i++)
{
// create the regex format
var userRegex = string.Format("^{0}", users[i]);
tokens.Add(userRegex);
}
// create regex to match the usernames
var regexes = tokens.Select(x => new Regex(x)).ToList();
// construct the query
var usersQuery = Query.In("Username", new BsonArray(regexes));