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

Mongodb query fails with FilterDefinition in a Collection using c#

我正在尝试将此 "simple" 查询从 MongoDB 控制台移动到我的 C# 代码。

这是查询:

db.getCollection('Entity').find({ Keywords : { $regex : /ABC/ } })

此查询 returns 关键字数组中包含 'ABC' 的所有实体。

当我尝试使用 MongoDB C# 驱动程序在 C# 中执行此操作时,我编写了以下代码:

FilterDefinition<Entity> filterDefinition = "{ Keywords : { $regex : /ABC/ } }";
var data= await _repository.Collection.Find(filterDefinition).ToListAsync();

但是我有一个错误:

FormatException: JSON reader expected a string but found '/ABC/'.

谢谢!!

您可以像这样使用包含正则表达式的表达式

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 查询构建器针对您的 collection.

构建对 运行 的查询

例如

var search = "ABC";    
Query<Entity>.Matches(t => t.Keywords, new BsonRegularExpression(string.Format("/{0}/i", Regex.Escape(search))));

返回的 IMongoQuery 然后可用于查询您的 collection 以及其他查询。