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/"。

谢谢!!

Mongodb查询在使用c#的集合中使用FilterDefinition失败

您可以使用包含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可以与其他查询一起用于查询集合。

相关文章:
  • 没有找到相关文章