在本文中,我们将了解如何使用.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 集合,供控制器使用。构造函数接受IMongoClient和IConfiguration作为参数。它从配置文件中检索数据库和集合名称,并使用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方法会构造一个过滤器,用于筛选出指定数字字段(例如int、long、double)或日期/时间字段(DateTime、DateTimeOffset)大于给定值的文档。它支持这些数据类型,以便在 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方法会构造一个过滤器,用于选择指定数字字段(例如int、long、double)或日期/时间字段(DateTime、DateTimeOffset)大于或等于给定值的文档。此方法扩展了 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方法构造一个过滤器,用于选择指定数字字段(例如int、long、double)或日期/时间字段(DateTime、DateTimeOffset)小于给定值的文档。此方法对于根据数字或时间条件查询 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方法构造一个过滤器,用于选择指定数字字段(例如int、long、double)或日期/时间字段(DateTime、DateTimeOffset)小于或等于给定值的文档。此方法支持数字和时间比较,从而可以在 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
如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。