MongoDB c#查询'Like'在字符串

本文关键字:字符串 Like MongoDB 查询 | 更新日期: 2023-09-27 18:16:35

我正在使用官方mongodb c#驱动程序。我想查询mongodb类似于SQL类似于c# driver中的db.users.find({name:/Joe/}

MongoDB c#查询'Like'在字符串

c#查询将看起来像:

Query.Matches("name", BsonRegularExpression.Create(new Regex("Joe")));

更新:

根据@RoberStam的建议,有更简单的方法来做到这一点:

Query.Matches("name", "Joe") 

对于c#驱动2.1 (MongoDB 3.0)

var collection = database.GetCollection<BsonDocument>("<<name of the collection>>");
var filter = Builders<BsonDocument>.Filter.Regex("name", new BsonRegularExpression("Joe"));
var result = await collection.Find(filter).ToListAsync();

c#驱动2.2 (MongoDB 3.0)

var filter = new BsonDocument { { parameterName, new BsonDocument { { "$regex", value }, { "$options", "i"} } } }
var result = collection.Find(filter).ToList();

MongoDB c#驱动程序有一个BsonRegex类型,你可以使用。

Regex是最接近SQL LIKE语句的。

请注意,带前缀的正则表达式可以使用索引:/^Joe/将使用索引,/Joe/不会。

假设我需要从Mongodb文档的属性中搜索变量'textToSearch'的值。

示例:我们必须在JobModel.Title包含manager的所有记录中搜索manager。这是记录中的textToSearch=manager。(textToSearch是一个字符串类型。我在回答的末尾添加了一些regex。为了涵盖textToSearch包含,textToSearch开始于和更多的场景)

等效c#代码:
Note: I have also shown how you can append to your existing filter, ignore it if not required.
var mongoBuilder = Builders<BsonDocument>.Filter;
var filter = mongoBuilder.Eq(y => y.JobModel.Category, "full time");
if (!string.IsNullOrEmpty(textToSearch))
{
    textToSearch = "/.*" + textToSearch + ".*/i"; // this regex will search all the records which contains textToSearch and ignores case
    filter = filter & mongoBuilder.Regex(y => y.JobModel.Title, new BsonRegularExpression(textToSearch));
}                

等价Mongo查询码:

db.jobs.find({ "JobModel.Category" : "full time", 
"JobModel.Title" : /.*manager.*/i })  

一些有用的正则表达式:

  • 这个正则表达式将搜索所有包含textToSearch并忽略大小写的记录。textToSearch = "/.*" + textToSearch + ".*/i";
  • 这个正则表达式将搜索所有以textToSearch开头的记录,并忽略大小写。textToSearch = "/^" + textToSearch + "/i";
  • 这个正则表达式将搜索所有以textToSearch开头的记录,并且不忽略大小写。textToSearch = "/.*" + textToSearch + ".*/";

感谢@Sridhar -类似的方法对我有效

public List<SearchModel> GetSearchResult(string searchParam) => _collection.Find(new BsonDocument { { "Datetime", new BsonDocument { { "$regex", searchParam }, { "$options", "i" } } } }).ToList(); // Search DateTime "Like"