Mongodb查询在使用c#的集合中使用FilterDefinition失败
本文关键字:FilterDefinition 失败 集合 查询 Mongodb | 更新日期: 2023-09-27 18:30:14
我正试图将这个"简单"的查询从MongoDB控制台移到我的C#代码中。
这是一个查询:
db.getCollection('Entity').find({ Keywords : { $regex : /ABC/ } })
此查询返回在关键字数组中包含"ABC"的关键字的所有实体。
当我尝试使用MongoDB C#驱动程序在C#中实现这一点时,我会对其进行编码:
FilterDefinition<Entity> filterDefinition = "{ Keywords : { $regex : /ABC/ } }";
var data= await _repository.Collection.Find(filterDefinition).ToListAsync();
但我有一个错误:
FormatException:JSON读取器需要一个字符串,但找到了"/ABC/"。
谢谢!!
您可以使用包含Regex的表达式,如
var regex = new Regex("ABC");
return collection.Find(e => regex.IsMatch(e.Keywords)).ToListAsync();
如果要创建FilterDefinition
,请使用生成器
var filter = Builders<Entity>.Filter.Regex("keywords", new BsonRegularExpression("ABC"));
return collection.Find(filter).ToListAsync();
如果您想在数组中查找匹配项,请使用类似的表达式
return collection.Find(e => e.Keywords.Any(k => regex.IsMatch(k)).ToListAsync();
您尝试过在csharp驱动程序中使用Matches方法吗?您可以使用Mongo查询生成器来构建查询,以便针对您的集合运行。
例如
var search = "ABC";
Query<Entity>.Matches(t => t.Keywords, new BsonRegularExpression(string.Format("/{0}/i", Regex.Escape(search))));
然后,返回的IMongoQuery可以与其他查询一起用于查询集合。