前面的文章介绍了MongoDB的基本操作,并创建了ChartData数据库,同时在气泡图集合BubbleData中维护了文档数据。本文学习使用ASP.NET Core WebAPI连接MongoDB数据库。
在终端中运行下列命令创建WebAPI,同时调用VSCode开始编辑项目。
dotnet new webapi -o ChartJSDataOperation
code ChartJSDataOperation
VSCode终端中运行下列命令添加MongoDB驱动(微软教程中建议先确定驱动的稳定版本,然后add package命令中指定版本,文中没有(lande)这么做)。
dotnet add package MongoDB.Driver
接着创建BubbleData集合对应的数据结构,该数据结构中的属性应与文档结构相同,并且大小写一致(参考文献1: BsonId指定属性为文档的主键,BsonRepresentation(BsonType.ObjectId)允许将参数作为类型 string 而非 ObjectId 结构传递。 Mongo 处理从 string 到 ObjectId 的转换)。
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace ChartJSDataOperation.Models
{
public class BubbleData
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id {
get; set; }
public decimal x {
get; set; }
public decimal y {
get; set; }
public decimal r {
get; set; }
}
}
然后在appsettings.json文件中配置MongoDB的连接信息,包括地址、数据库名称、集合名称等,同时在Models文件夹下创建对连接信息对应的接口和类,以便程序能从配置文件中自动提取信息并创建类的实例对象。
//appsettings.json中的配置信息
"ChartJSDatabaseSettings": {
"DataCollectionName": "BubbleData",
"ConnectionString": "mongodb://localhost:27017",
"DatabaseName": "ChartData"
},
public class ChartJSDatabaseSettings : IChartJSDatabaseSettings
{
public string DataCollectionName {
get; set; }
public string ConnectionString {
get; set; }
public string DatabaseName {
get; set; }
}
public interface IChartJSDatabaseSettings
{
string DataCollectionName {
get; set; }
string ConnectionString {
get; set; }
string DatabaseName {
get; set; }
}
下一步创建MongoDB的操作类,该类主要用于连接MongoDB数据库并获取集合中的文档数据,本类精简自参考文献1中的类,主要用于获取全部数据及新增单条数据,其代码如下:
using MongoDB.Driver;
using System.Collections.Generic;
using System.Linq;
namespace ChartJSDataOperation.Models
{
public class ChartDataService
{
private readonly IMongoCollection<BubbleData> _bubble;
public ChartDataService(IChartJSDatabaseSettings settings)
{
var client = new MongoClient(settings.ConnectionString);
var database = client.GetDatabase(settings.DatabaseName);
_bubble = database.GetCollection<BubbleData>(settings.DataCollectionName);
}
public List<BubbleData> Get()
{
_bubble.Find(bData => true).ToList();
}
public BubbleData Create(BubbleData bData)
{
_bubble.InsertOne(bData);
return bData;
}
}
}
创建控制类,并在控制类中实现响应GET请求并返回集合中所有文档的函数,这部分代码与之前介绍的相同,在此不在赘述。
最后在startup文件的ConfigureServices函数中注册数据库操作类、配置类等。
public void ConfigureServices(IServiceCollection services)
{
services.Configure<ChartJSDatabaseSettings>(
Configuration.GetSection(nameof(ChartJSDatabaseSettings)));
services.AddSingleton<IChartJSDatabaseSettings>(sp =>
sp.GetRequiredService<IOptions<ChartJSDatabaseSettings>>().Value);
services.AddSingleton<ChartDataService>();
...
...
}
编译并运行项目,然后在浏览器中访问WebAPI,如下图所示,程序可以正常读取MongoDB数据库的文档数据。
本文学习并参照参考文献1实现了在WebAPI中连接MongoDB数据库进行查询操作,后续还会继续学习、实践相关内容。
参考文献:
[1]https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/first-mongo-app?view=aspnetcore-5.0&tabs=visual-studio-code