使用 MongoDB.Driver 在 C# .NETCore 中实现 Mongo DB 过滤器

在本文中,我们将了解如何使用.NET 和 C# 来使用MongoDB.Driver中提供的各种过滤器。我们将使用 MongoDB.Driver 包执行各种操作。本文重点介绍 MongoDB 操作,因此我们不会为 .NET 项目实现高级架构。相反,我们将创建一个 .NET 8 Web API 项目,并直接在控制器中实现所有操作,而不是创建单独的服务或存储库类。您可以根据自身需求实现这些架构。

示例代码:https://download.csdn.net/download/hefeng_aspnet/91716842

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

如果想了解如何在 .NET 项目中配置 MongoDB,并对数据库和集合进行各种操作,可以参考上一篇文章:使用 .NET 实现 MongoDB。使用 C# .NETCore 实现MongoDB

创建集合实例

private readonly IMongoCollection<Employee> _employeeCollection;

public MongoFiltersController(IMongoClient mongoClient, IConfiguration configuration)

{

var databaseName = configuration.GetValue<string>("MongoDbSettings:DatabaseName");

var employeeCollection = configuration.GetValue<string>("MongoDbSettings:Collections:EmployeeCollection");

var database = mongoClient.GetDatabase(databaseName);

_employeeCollection = database.GetCollection<Employee>(employeeCollection);

}

这段代码设置了一个 MongoDB 集合,供控制器使用。构造函数接受IMongoClientIConfiguration 作为参数。它从配置文件中检索数据库和集合名称,并使用mongoClient.GetDatabase(databaseName) 获取数据库实例,然后使用 database.GetCollection(employeeCollection) 获取 Employee 集合。该集合存储在**_employeeCollection**字段中,可供控制器内的其他方法使用。此设置允许您对 Employee 集合执行 CRUD 操作。

以下是示例中使用的员工集合。

public class Employee

{

BsonId

BsonRepresentation(BsonType.ObjectId)

public string Id { get; set; }

public string Name { get; set; }

public int Age { get; set; }

public string Designation { get; set; }

public decimal Salary { get; set; }

public DateTime DateOfBirth { get; set; }

public string[] Skills { get; set; }

}

等于过滤器

HttpGet("eq")

public async Task<IActionResult> Equal(string name)

{

var filter = Builders<Employee>.Filter.Eq(emp => emp.Name, name);

var results = await _employeeCollection.Find(filter).ToListAsync();

return Ok(results);

}

MongoDB .NET 驱动程序中的Eq 方法用于创建相等性过滤器。此过滤器会选择指定字段与给定值匹配的文档。该方法是FilterDefinitionBuilder类的一部分,可通过 Builders.Filter 访问。

例如,Eq 可用于查找集合中特定字段(例如 Name)等于给定值(例如"John Doe")的所有文档。然后,此过滤器可用于查询,从 MongoDB 集合中检索匹配的文档。Eq方法对于精确过滤至关重要,它可以轻松地基于精确的字段值匹配来查询文档。

不等于过滤器

HttpGet( "ne" )

public async Task<IActionResult> NotEqual ( string name )

{

var filter = Builders<Employee>.Filter.Ne(emp => emp.Name, name);

var results = await _employeeCollection.Find(filter).ToListAsync();

return Ok(results);

}

MongoDB .NET 驱动程序中的Ne方法会创建一个过滤器,用于筛选指定字段不等于给定值的文档。它用于根据精确的字段值匹配来排除文档,为 MongoDB 查询中的精确数据过滤提供必要的功能。

大于过滤器

HttpGet( "gt" )

public async Task<IActionResult> GreaterThan ( int age )

{

var filter = Builders<Employee>.Filter.Gt(emp => emp.Age, age);

//var filter = Builders<Employee>.Filter.Gt(emp => emp.DateOfBirth, DateTime.Now);

var results = await _employeeCollection.Find(filter).ToListAsync();

return Ok(results);

}

MongoDB .NET 驱动程序中的Gt 方法会构造一个过滤器,用于筛选出指定数字字段(例如intlongdouble )或日期/时间字段(DateTimeDateTimeOffset)大于给定值的文档。它支持这些数据类型,以便在 MongoDB 数据库中进行精确的数据比较。

大于或等于过滤器

HttpGet( "gte" )

public async Task<IActionResult> GreaterThanOrEqual ( int age )

{

var filter = Builders<Employee>.Filter.Gte(emp => emp.Age, age);

//var filter = Builders<Employee>.Filter.Gte(emp => emp.DateOfBirth, DateTime.Now);

var results = await _employeeCollection.Find(filter).ToListAsync();

return Ok(results);

}

MongoDB .NET 驱动程序中的Get 方法会构造一个过滤器,用于选择指定数字字段(例如intlongdouble )或日期/时间字段(DateTimeDateTimeOffset)大于或等于给定值的文档。此方法扩展了 Gt 的功能,同时还包含字段值与指定值匹配的文档。

小于过滤器

HttpGet( "lt" )

public async Task<IActionResult> LessThan ( int age )

{

var filter = Builders<Employee>.Filter.Lt(emp => emp.Age, age);

//var filter = Builders<Employee>.Filter.Lt(emp => emp.DateOfBirth, DateTime.Now);

var results = await _employeeCollection.Find(filter).ToListAsync();

return Ok(results);

}

MongoDB .NET 驱动程序中的Lt 方法构造一个过滤器,用于选择指定数字字段(例如intlongdouble )或日期/时间字段(DateTimeDateTimeOffset)小于给定值的文档。此方法对于根据数字或时间条件查询 MongoDB 集合至关重要,有助于进行精确的数据比较。

小于或等于过滤器

HttpGet( "lte" )

public async Task<IActionResult> LessThanOrEqual ( int age )

{

var filter = Builders.Employee.Filter.Lte(emp => emp.Age, age);

//var filter = Builders<Employee>.Filter.Lte(emp => emp.DateOfBirth, DateTime.Now);

var results = await _employeeCollection.Find(filter).ToListAsync();

return Ok(results);

}

MongoDB .NET 驱动程序中的Lte 方法构造一个过滤器,用于选择指定数字字段(例如intlongdouble )或日期/时间字段(DateTimeDateTimeOffset)小于或等于给定值的文档。此方法支持数字和时间比较,从而可以在 MongoDB 集合中进行精确的数据过滤。

在过滤器中

HttpGet( "in" )

public async Task<IActionResult> In ( [FromQuery] string [] names )

{

var filter = Builders<Employee>.Filter.In(emp => emp.Name, names);

var results = await _employeeCollection.Find(filter).ToListAsync();

return Ok(results);

}

MongoDB .NET 驱动程序中的In方法会创建一个过滤器,用于筛选出指定字段(本例中为 Name)与指定数组(names)中任意值匹配的文档。此方法简化了基于指定字段的多种可能匹配项的 MongoDB 集合查询,例如,检索员工姓名与 names 数组中任意名称匹配的文档。

不在过滤器中

HttpGet( "nin" )

public async Task<IActionResult> NotIn ( [FromQuery] string [] names )

{

var filter = Builders<Employee>.Filter.Nin(emp => emp.Name, names);

var results = await _employeeCollection.Find(filter).ToListAsync();

return Ok(results);

}

MongoDB .NET 驱动程序中的Nin方法会构建一个过滤器,用于筛选出指定字段(本例中为 Name)与指定数组(名称)中的任何值均不匹配的文档。此方法可用于根据指定字段的多个潜在匹配项从 MongoDB 集合中排除文档。

并过滤

HttpGet( "and" )

public async Task<IActionResult> And(string name, int age)

{

var filter = Builders<Employee>.Filter.And(

Builders.Employee.Filter.E q(emp => emp.Name, name) ,

Builders<Employee>.Filter.E q(emp => emp.Age, age) );

var results = await _employeeCollection.Find(filter).ToListAsync();

return Ok(results);

}

MongoDB .NET 驱动程序中的And 方法可构建一个过滤器,用于筛选多个条件必须同时成立的文档。在本例中,它使用Eq 组合两个条件,筛选出Name 等于指定姓名且Age等于指定年龄的 Employee 文档。此方法适用于创建需要满足多个条件才能在 MongoDB 集合中选择文档的复杂查询。

或筛选

HttpGet( "or" )

public async Task<IActionResult> Or ( string name, int age )

{

var filter = Builders.Employee.Filter.Or(

Builders<Employee>.Filter.Eq(emp => emp.Name, name),

Builders<Employee>.Filter.Eq(emp => emp.Age, age));

var results = await _employeeCollection.Find(filter).ToListAsync();

return Ok(results);

}

MongoDB .NET 驱动程序中的Or 方法会构造一个过滤器,用于筛选出满足多个条件中至少一个条件的文档。在本例中,它使用Eq组合两个条件,筛选出 Name 等于指定姓名或Age等于指定年龄的Employee 文档。此方法对于创建需要包含 MongoDB 集合中满足多个条件之一的文档的查询至关重要。

存在过滤器

HttpGet( "exists" )

public async Task<IActionResult> Exists ( string fieldName )

{

var filter = Builders.Employee.Filter.Exists(fieldName);

// 或

// var filter = Builders<Employee>.Filter.Exists(x=>x.Designation);

var results = await _employeeCollection.Find(filter).ToListAsync();

return Ok(results);

}

MongoDB .NET 驱动程序中的Exists方法构造一个过滤器,用于筛选指定字段存在或不存在的文档。此示例演示了如何筛选指定字段存在的 Employee 文档。此外,还可以修改该方法,通过传递 false 作为第二个参数来筛选指定字段不存在的文档。此方法对于根据特定字段的存在与否来查询 MongoDB 集合至关重要。

类型过滤器

HttpGet( "type" )

public async Task<IActionResult> Type ( string fieldName, BsonType bsonType )

{

var filter = Builders<Employee>.Filter.Type(fieldName, bsonType);

var results = await _employeeCollection.Find(filter).ToListAsync();

return Ok(results);

}

MongoDB .NET 驱动程序中的 Type 方法会构建一个过滤器,用于筛选指定字段与给定 BSON 类型匹配的文档。 方法对于基于数据类型查询 MongoDB 集合至关重要,可确保根据特定的 BSON类型条件进行精确的数据检索。

正则表达式过滤器

HttpGet( "regex" )

public async Task<IActionResult> Regex ()

{

var pattern = "^J" ; // 以 'J' 开头的名称

//var pattern = "n$"; // 以 'n' 结尾的名称

//var pattern = ".[aei]."; // 包含 'a'、'e' 或 'i' 的名称

//..... 以及更多

var filter = Builders<Employee>.Filter.Regex(emp => emp.Name, new BsonRegularExpression(pattern)); var

results = await _employeeCollection.Find(filter).ToListAsync();

return Ok(results);

}

MongoDB .NET 驱动程序中的Regex方法会创建一个过滤器,用于查找指定字段与正则表达式定义的模式匹配的文档。此方法适用于字符串字段,允许您执行高级文本搜索和过滤。它可以帮助您查找包含符合复杂模式的文本的文档,从而为您提供强大的数据搜索方法。

全部筛选

HttpGet( "all" )

public async Task<IActionResult> All ( [FromQuery] string [] skill )

{

var filter = Builders<Employee>.Filter.All(emp => emp.Skills, skill);

var results = await _employeeCollection.Find(filter).ToListAsync();

return Ok(results);

}

MongoDB .NET 驱动程序中的All 方法构造一个过滤器,用于筛选数组字段包含指定数组所有元素的文档。在本例中,它筛选了Skills 数组包含所有指定技能的 Employee 文档。此方法对于根据数组内容查询 MongoDB 集合非常有用。

ElemMatch 过滤器

HttpGet( "elemMatch" )

public async Task<IActionResult> ElemMatch ( string skill )

{

var filter = Builders<Employee>.Filter.ElemMatch(emp => emp.Skills, skill);

var results = await _employeeCollection.Find(filter).ToListAsync();

return Ok(results);

}

MongoDB .NET 驱动程序中的ElemMatch 方法构造一个过滤器,用于筛选出数组字段中至少有一个元素符合指定条件的文档。在本例中,它筛选出Skills 数组中至少有一个元素符合指定技能的 Employee 文档。此方法对于根据应用于数组元素的条件查询 MongoDB 集合至关重要。

尺寸过滤器

HttpGet( "size" )

public async Task<IActionResult> Size ( int size )

{

var filter = Builders<Employee>.Filter.Size(emp => emp.Skills, size);

var results = await _employeeCollection.Find(filter).ToListAsync();

return Ok(results);

}

MongoDB .NET 驱动程序中的Size 方法构造一个过滤器,用于筛选数组字段具有指定大小的文档。在本例中,它筛选了Skills 数组具有指定元素数量的 Employee 文档。此方法对于根据数组字段的大小查询 MongoDB 集合非常有用。

结论

在本文中,我们使用 .NET 和 C# 探索了MongoDB.Driver包中可用的各种 MongoDB 过滤器。这些过滤器允许您在 MongoDB 集合中执行各种数据查询操作。

示例代码:https://download.csdn.net/download/hefeng_aspnet/91716842

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
麦兜*4 小时前
MongoDB 性能调优:十大实战经验总结 详细介绍
数据库·spring boot·mongodb·spring cloud·缓存·硬件架构
tiancao2229 小时前
安装3DS MAX 2026后,无法运行,提示缺少.net core的解决方案
.net·.netcore·3dsmax
csdn_aspnet9 小时前
使用 C# .NETCore 实现MongoDB
mongodb·c#·.netcore
上位机付工10 小时前
上位机通信速度有多快?
开发语言·c#·上位机·plc
FuckPatience14 小时前
C# 修改基类List中某一元素的子类类型
c#·list
玉面小君17 小时前
从 WPF 到 Avalonia 的迁移系列实战篇6:ControlTheme 和 Style区别
c#·wpf·avalonia
_oP_i1 天前
WinForms 项目里生成时选择“首选目标平台 32 位导致有些电脑在获取office word对象时获取不到
c#·office