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 以及其他查询。
我正在尝试将此 "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 以及其他查询。