C# Mongodb查询在使用c的集合中使用FilterDefinition失败#
我试图将这个“简单”的查询从MongoDB控制台移动到我的C代码中 以下是查询:C# Mongodb查询在使用c的集合中使用FilterDefinition失败#,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,我试图将这个“简单”的查询从MongoDB控制台移动到我的C代码中 以下是查询: db.getCollection('Entity').find({ Keywords : { $regex : /ABC/ } }) 此查询返回关键字数组中包含“ABC”的所有实体 当我尝试在C#中使用MongoDB C#驱动程序执行此操作时,我编写了以下代码: FilterDefinition<Entity> filterDefinition = "{ Keywords : { $regex : /
db.getCollection('Entity').find({ Keywords : { $regex : /ABC/ } })
此查询返回关键字数组中包含“ABC”的所有实体
当我尝试在C#中使用MongoDB C#驱动程序执行此操作时,我编写了以下代码:
FilterDefinition<Entity> filterDefinition = "{ Keywords : { $regex : /ABC/ } }";
var data= await _repository.Collection.Find(filterDefinition).ToListAsync();
FilterDefinition FilterDefinition=“{关键字:{$regex:/ABC/}”;
var data=await_repository.Collection.Find(filterDefinition.ToListSync();
但我有一个错误:
FormatException:JSON读取器需要一个字符串,但找到“/ABC/”
谢谢 可以使用包含如下正则表达式的表达式
var regex = new Regex("ABC");
return collection.Find(e => regex.IsMatch(e.Keywords)).ToListAsync();
如果要创建过滤器定义
,请使用生成器
var filter = Builders<Entity>.Filter.Regex("keywords", new BsonRegularExpression("ABC"));
return collection.Find(filter).ToListAsync();
您是否尝试过在csharp驱动程序中使用Matches方法?您可以使用Mongo查询生成器来构造查询以针对集合运行 e、 g
var search=“ABC”;
Matches(t=>t.Keywords,新的BsonRegularExpression(string.Format(“/{0}/i”,Regex.Escape(search));
然后,返回的IMongoQuery可以与其他查询一起用于查询您的收藏。@chemitaxis我为数组添加了一个示例。谢谢,它工作得很好。。。但为什么我的解决方案不起作用呢?我可以看到过滤器是相同的。第二部分没有必要:var filter=Builders.filter.Regex(“关键字”,新的BsonRegularExpression(“/”+query+“/”));这很好。@chemitaxis我想是因为
FilterDefinition
string转换需要JSON,而JSON没有regex-literalsPlease,请用我的注释编辑您的答案,然后我像OK一样检查:)
return collection.Find(e => e.Keywords.Any(k => regex.IsMatch(k)).ToListAsync();
var search = "ABC";
Query<Entity>.Matches(t => t.Keywords, new BsonRegularExpression(string.Format("/{0}/i", Regex.Escape(search))));