如何使用正则表达式从 C# 中的 MongoDB 集合中获取数据?

How to fetch data from MongoDB collection in C# using Regular Expression?

我在 MVC (C#) 网络应用程序中使用 MongoDB.Drivers nuget 包与 MongoDB 数据库进行通信。现在,我想根据特定列及其值获取数据。我使用下面的代码来获取数据。

var findValue = "John";
                var clientTest1 = new MongoClient("mongodb://localhost:XXXXX");
                var dbTest1 = clientTest1.GetDatabase("Temp_DB");
                var empCollection = dbTest1.GetCollection<Employee>("Employee");
                var builder1 = Builders<Employee>.Filter;
                var filter1 = builder1.Empty;
                var regexFilter = new BsonRegularExpression(findValue, "i");
                filter1 = filter1 & builder1.Regex(x => x.FirstName, regexFilter);
                filter1 = filter1 & builder1.Eq(x => x.IsDeleted,false);
                var collectionObj = await empCollection.FindAsync(filter1);
                var dorObj = collectionObj.FirstOrDefault();

但是, 上面的代码正在执行 like 查询。 这意味着它的工作方式为 (select * from Employee where FirstName like '%John%') 我不想要这个。我只想获取那些 FirstName 值应该完全匹配的数据。 (就像在这种情况下,名字应该等于 John)。

我该如何执行此操作,任何人都可以为此提供建议。

注:我用new BsonRegularExpression(findValue, "i")搜索case-insensitive

任何帮助将不胜感激。

谢谢

我建议存储数据的规范化版本,index/search 在此基础上。它可能比使用正则表达式快得多。当然,通过在 "John" 旁边包含 "john",您会占用更多的存储空间 space,但是您的数据访问速度会更快,因为您只能使用标准的 $eq 查询.

如果您坚持使用正则表达式,我建议您在搜索词周围使用 ^(行首)和 $(行尾)。但请记住,您应该转义查找值,这样它的内容就不会被视为 RegEx。

这应该有效:

string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression(string.Format("^{0}$", escapedFindValue), "i");

或者,如果您使用的是较新的框架版本,则可以使用字符串插值:

string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression($"^{escapedFindValue}$", "i");