MongoDB c#查询'Like'在字符串
本文关键字:字符串 Like MongoDB 查询 | 更新日期: 2023-09-27 18:16:35
我正在使用官方mongodb c#驱动程序。我想查询mongodb类似于SQL类似于c# driver中的db.users.find({name:/Joe/}
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开始于和更多的场景)
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"