Ori*_*ael 0 c# mongodb mongodb-.net-driver
我有一个集合,我在其中存储用户的电子邮件和密码。
我显然不想要求用户插入他的电子邮件区分大小写并且与他第一次注册时完全一样。
我正在使用 mongodb 2.0 c# 驱动程序,我在重复它,因为我看到了用正则表达式编写的查询的解决方案,但恐怕我不能在这里使用它。
我的查询看起来像
var filter = Builders<ME_User>.Filter.And(
Builders<ME_User>.Filter.Eq(u => u.Email, email),
Builders<ME_User>.Filter.Eq(u => u.Password, password));
ME_User foundUser = null;
var options = new FindOptions<ME_User>
{
Limit = 1
};
using (var cursor = await manager.User.FindAsync(filter, options))
{
while (await cursor.MoveNextAsync())
{
var batch = cursor.Current;
foreach (ME_User user in batch)
foundUser = user;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个混乱的问题,杀了我,但我不能让自己用小写再次保存这些数据,并且有 2 个相同内容的副本。另外,我希望电子邮件能够像用户插入的那样完全保存。
在 Mongodb 中过滤字符串字段区分大小写,不使用正则表达式。为什么你不能使用正则表达式?
您的查询可以像这样编辑:
var filter = Builders<ME_User>.Filter.And(
Builders<ME_User>.Filter.Regex(u => u.Email, new BsonRegularExpression("/^" + email + "$/i"),
Builders<ME_User>.Filter.Eq(u => u.Password, password));
Run Code Online (Sandbox Code Playgroud)
注意“^”和“$”符号来指定完整的单词搜索,最重要的是正则表达式末尾的不区分大小写的运算符(“/i”)。
另一种方法是文本搜索,它需要创建一个文本索引并且拉丁字母不区分大小写:http : //docs.mongodb.org/manual/reference/operator/query/text/#match-operation
在 C# 中,您将使用文本过滤器:
var filter = Builders<ME_User>.Filter.And(
Builders<ME_User>.Filter.Text(email),
Builders<ME_User>.Filter.Eq(u => u.Password, password));
Run Code Online (Sandbox Code Playgroud)
对于 OR 子句中的文本索引查询,您还需要在 Password 字段上创建索引,否则 OR 查询将产生错误:
OR 下的其他非 TEXT 子句也必须编入索引