mongodb 如何在C#中使mongo过滤器搜索不区分大小写

b5lpy0ml  于 2022-11-03  发布在  Go
关注(0)|答案(1)|浏览(234)

我在这里有这样的查询:

var filter =
        builder.Eq("BuyerDetails.Buyer.Email", request.BuyerEmail)
                 | builder.Eq("BuyerDetails.Buyer.FirstName", request.FirstName)
                 & builder.Eq("BuyerDetails.Buyer.Surname", request.LastName);

然而问题是,我无法预料的情况下,电子邮件,名和姓是蒙戈。
如果请求是名字=“堆栈”且姓氏=“溢出”
而mongo中的文档是“firstName =“stack”和LastName =“overflow”
它将不匹配。
如何使用筛选并使其不区分大小写?

ijxebb2r

ijxebb2r1#

您需要使用$regex操作符。在MongoDB .NET驱动程序中,请参阅FilterDefinitionBuilder.Regex Method (FieldDefinition, BsonRegularExpression)

using System.Text.RegularExpressions;

builder.Regex("BuyerDetails.Buyer.FirstName", new Regex(request.FirstName, RegexOptions.IgnoreCase))

builder.Regex("BuyerDetails.Buyer.Surname", new Regex(request.LastName, RegexOptions.IgnoreCase))

需要注意的是,上面的查询将查找字段值为的单据,但不保证从开始到结束。示例:
名字的搜索关键字:堆栈
| 名字|是否匹配?|
| - -|- -|
| 堆叠|是的|
| 堆栈xxx|是的|
| xxx堆栈|是的|
| xxx堆栈xxx|是的|
如果您要使用筛选字符串从头到尾的匹配项(完全匹配)来筛选文档,则需要在regex中使用^开始符号和$结束符号。

var filter =
    builder.Eq("BuyerDetails.Buyer.Email", request.BuyerEmail)
    | builder.Regex("BuyerDetails.Buyer.FirstName", new Regex($"^{request.FirstName}$", RegexOptions.IgnoreCase))
    & builder.Regex("BuyerDetails.Buyer.Surname", new Regex($"^{request.LastName}$", RegexOptions.IgnoreCase));

相关问题