MongoDB是一种文档数据库,它以BSON(二进制JSON)为数据存储格式,支持索引、联表查询和文档级锁定等特性。下面将为大家详细介绍MongoDB数据库,并提供两条.NET Core编码示例。
MongoDB数据库介绍
MongoDB的优点
- 数据以文档形式存储
- BSON格式的数据存储格式
- 支持动态查询语言
- 可伸缩性强
- 可自身提供容错保护
- 支持二进制数据存储,如图片和视频等
- 社区活跃
MongoDB的缺点
- 不支持SQL语言,不支持事务
- 数据库连接较慢,内存占用较高
- 无法使用join操作,不支持外键
- 不支持复杂聚合操作
- 限制较多,如单文档大小限制2G
使用.NET Core对MongoDB进行编码
安装MongoDB驱动程序
在.NET Core项目中使用MongoDB,需要安装MongoDB驱动程序。可以通过NuGet安装MongoDB驱动程序包,例如MongoDB.Driver:
dotnet add package MongoDB.Driver
连接MongoDB数据库
连接MongoDB数据库需要使用MongoClient类。以下示例演示如何连接本机MongoDB实例:
using MongoDB.Driver;
var client = new MongoClient("mongodb://localhost:27017");
var database = client.GetDatabase("mydatabase");
插入数据
可以使用InsertOneAsync或InsertManyAsync方法插入数据到MongoDB数据库。以下示例演示如何插入单个文档:
using MongoDB.Bson;
using MongoDB.Driver;
var person = new BsonDocument
{
{ "name", "Alice" },
{ "age", 30 },
{ "email", "alice@example.com" }
};
var collection = database.GetCollection<BsonDocument>("persons");
await collection.InsertOneAsync(person);
查询数据
可以使用FindAsync方法查询MongoDB数据库。以下示例演示如何查询名字为“Bob”的人:
using MongoDB.Bson;
using MongoDB.Driver;
var filter = Builders<BsonDocument>.Filter.Eq("name", "Bob");
var collection = database.GetCollection<BsonDocument>("persons");
var result = await collection.FindAsync(filter);
更新数据
可以使用UpdateOneAsync或UpdateManyAsync方法更新MongoDB数据库。以下示例演示如何将名字为“John”的人的年龄从25岁更新为30岁:
using MongoDB.Bson;
using MongoDB.Driver;
var filter = Builders<BsonDocument>.Filter.Eq("name", "John");
var update = Builders<BsonDocument>.Update.Set("age", 30);
var collection = database.GetCollection<BsonDocument>("persons");
await collection.UpdateOneAsync(filter, update);
删除数据
可以使用DeleteOneAsync或DeleteManyAsync方法删除MongoDB数据库中的数据。以下示例演示如何删除名字为“Tom”的人:
using MongoDB.Bson;
using MongoDB.Driver;
var filter = Builders<BsonDocument>.Filter.Eq("name", "Tom");
var collection = database.GetCollection<BsonDocument>("persons");
await collection.DeleteOneAsync(filter);
示例一:使用.NET Core进行MongoDB数据库的操作
在.NET Core项目中使用MongoDB进行数据操作具体步骤:
步骤一:安装MongoDB驱动程序
首先,需要安装MongoDB驱动程序。在Visual Studio中,通过NuGet安装MongoDB.Driver:
Install-Package MongoDB.Driver
步骤二:连接MongoDB数据库
在.NET Core项目中连接MongoDB数据库,需在appsettings.json文件中配置MongoDB连接字符串:
{
"MongoDB": {
"ConnectionString": "mongodb://localhost:27017",
"DatabaseName": "mydatabase"
}
}
然后,在代码中读取配置并连接MongoDB数据库:
using Microsoft.Extensions.Configuration;
using MongoDB.Driver;
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
var connectionString = configuration.GetSection("MongoDB:ConnectionString").Value;
var databaseName = configuration.GetSection("MongoDB:DatabaseName").Value;
var client = new MongoClient(connectionString);
var database = client.GetDatabase(databaseName);
步骤三:操作MongoDB数据库
在.NET Core项目中使用MongoDB进行数据操作,可以参考上文所述的插入、查询、更新和删除数据方法进行操作。以下示例演示如何在.NET Core项目中使用MongoDB进行数据插入和查询:
using MongoDB.Bson;
using MongoDB.Driver;
// 插入数据
var person = new BsonDocument
{
{ "name", "Alice" },
{ "age", 30 },
{ "email", "alice@example.com" }
};
var collection = database.GetCollection<BsonDocument>("persons");
await collection.InsertOneAsync(person);
// 查询数据
var filter = Builders<BsonDocument>.Filter.Eq("name", "Alice");
var result = await collection.FindAsync(filter);
var persons = await result.ToListAsync();
示例二:使用ASP.NET Core Web API和MongoDB进行通信
本示例介绍如何使用ASP.NET Core Web API和MongoDB进行通信。首先,需要安装项目依赖项:ASP.NET Core Web API、MongoDB.Driver和Swashbuckle.AspNetCore。
dotnet new webapi --name MyProject
cd MyProject
dotnet add package MongoDB.Driver
dotnet add package Swashbuckle.AspNetCore --version=5.0.0-rc4
步骤一:添加配置
在appsettings.json文件中配置MongoDB连接字符串:
{
"ConnectionString": "mongodb://localhost:27017",
"DatabaseName": "mydatabase"
}
配置Program.cs文件:
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Configuration;
using MongoDB.Driver;
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.Build();
var host = Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.Build();
步骤二:创建数据模型和数据访问对象
创建Person.cs数据模型:
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
public class Person
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
[BsonElement("name")]
public string Name { get; set; }
[BsonElement("age")]
public int Age { get; set; }
[BsonElement("email")]
public string Email { get; set; }
}
创建PersonDao.cs数据访问对象:
using MongoDB.Driver;
public class PersonDao
{
private readonly IMongoCollection<Person> _collection;
public PersonDao(IConfiguration configuration)
{
var connectionString = configuration.GetConnectionString("ConnectionString");
var databaseName = configuration.GetConnectionString("DatabaseName");
var client = new MongoClient(connectionString);
var database = client.GetDatabase(databaseName);
_collection = database.GetCollection<Person>("persons");
}
public async Task<IList<Person>> GetPersonsAsync()
{
var result = await _collection.FindAsync(FilterDefinition<Person>.Empty);
return await result.ToListAsync();
}
public async Task<Person> GetPersonByIdAsync(string id)
{
var filter = Builders<Person>.Filter.Eq(p => p.Id, id);
var result = await _collection.FindAsync(filter);
return await result.FirstOrDefaultAsync();
}
public async Task<Person> AddPersonAsync(Person person)
{
await _collection.InsertOneAsync(person);
return person;
}
public async Task<Person> UpdatePersonAsync(string id, Person person)
{
var filter = Builders<Person>.Filter.Eq(p => p.Id, id);
await _collection.ReplaceOneAsync(filter, person);
return person;
}
public async Task DeletePersonAsync(string id)
{
var filter = Builders<Person>.Filter.Eq(p => p.Id, id);
await _collection.DeleteOneAsync(filter);
}
}
步骤三:添加控制器
添加PersonController.cs控制器:
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/[controller]")]
public class PersonController : ControllerBase
{
private readonly PersonDao _dao;
public PersonController(PersonDao dao)
{
_dao = dao;
}
[HttpGet]
public async Task<ActionResult<IEnumerable<Person>>> Get()
{
return await _dao.GetPersonsAsync();
}
[HttpGet("{id}")]
public async Task<ActionResult<Person>> Get(string id)
{
return await _dao.GetPersonByIdAsync(id);
}
[HttpPost]
public async Task<ActionResult<Person>> Post(Person person)
{
return await _dao.AddPersonAsync(person);
}
[HttpPut("{id}")]
public async Task<ActionResult<Person>> Put(string id, Person person)
{
var existingPerson = await _dao.GetPersonByIdAsync(id);
if (existingPerson == null)
{
return NotFound();
}
var updatedPerson = existingPerson with
{
Name = person.Name,
Age = person.Age,
Email = person.Email
};
return await _dao.UpdatePersonAsync(id, updatedPerson);
}
[HttpDelete("{id}")]
public async Task<IActionResult> Delete(string id)
{
await _dao.DeletePersonAsync(id);
return NoContent();
}
}
步骤四:运行项目
在控制台窗口中,进入项目根目录并运行以下命令:
dotnet run
打开浏览器并访问以下地址:
https://localhost:5001/swagger/index.html
可以使用Swagger测试PersonController接口。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MongoDB数据库介绍并用.NET Core对其进行编码 - Python技术站