简介
MongoDB 是一个不同于 MySQL、SQL Server 等传统关系型数据库的面向文档的数据库管理系统,它是由 C++ 语言编写,基于分布式文件存储,为 WEB 应用提供了可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
1 | { |
本文介绍在 .NET 6 环境下创建一个类库项目来实现对 MongoDB 数据库的增删改查,同时我们使用 MongoDB 提供的 云端的数据库服务-MongoDB Atlas
,这样就无须在本地安装配置 MongoDB 服务了。
创建 .Net 6 类库项目
新建项目
安装包
安装 MongoDB 数据库的驱动:MongoDB.Driver
1 | PM> Install-Package MongoDB.Driver -Version 2.17.1 |
创建 MongoDbHelper 类
这里将 C# 中对 MongoDB 数据库的增删改查封装到 MongoDbHelper 类,便于操作。
插入数据
1
2
3
4
5
6
7
8
9
10
11public void Insert<TDoc>(TDoc doc, InsertOneOptions options = null)
{
string collectionName = typeof(TDoc).Name;
Insert<TDoc>(collectionName, doc, options);
}
public void Insert<TDoc>(string collectionName, TDoc doc, InsertOneOptions options = null)
{
var colleciton = GetMongoCollection<TDoc>(collectionName);
colleciton.InsertOne(doc, options);
}删除
1
2
3
4
5
6
7
8
9
10
11public bool Delete<TDoc>(Expression<Func<TDoc, bool>> filter, DeleteOptions options = null)
{
string collectionName = typeof(TDoc).Name;
return Delete<TDoc>(collectionName, filter, options);
}
public bool Delete<TDoc>(string collectionName, Expression<Func<TDoc, bool>> filter, DeleteOptions options = null)
{
var colleciton = GetMongoCollection<TDoc>(collectionName);
return colleciton.DeleteOne(filter, options).IsAcknowledged;
}修改
1
2
3
4
5
6
7
8
9
10
11public void Update<TDoc>(Expression<Func<TDoc, bool>> filter, UpdateDefinition<TDoc> updateFields, UpdateOptions options = null)
{
string collectionName = typeof(TDoc).Name;
Update<TDoc>(collectionName, filter, updateFields, options);
}
public void Update<TDoc>(string collectionName, Expression<Func<TDoc, bool>> filter, UpdateDefinition<TDoc> updateFields, UpdateOptions options = null)
{
var colleciton = GetMongoCollection<TDoc>(collectionName);
colleciton.UpdateOne(filter, updateFields, options);
}查询
1
2
3
4
5
6
7
8
9
10
11public List<TDoc> Find<TDoc>(Expression<Func<TDoc, bool>> filter, FindOptions options = null)
{
string collectionName = typeof(TDoc).Name;
return Find<TDoc>(collectionName, filter, options);
}
public List<TDoc> Find<TDoc>(string collectionName, Expression<Func<TDoc, bool>> filter, FindOptions options = null)
{
var colleciton = GetMongoCollection<TDoc>(collectionName);
return colleciton.Find(filter, options).ToList();
}总数查询
1
2
3
4
5public long Count<TDoc>(string collectionName, EstimatedDocumentCountOptions options = null)
{
var collection = GetMongoCollection<TDoc>(collectionName);
return collection.EstimatedDocumentCount(options);
}创建数据实体类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15public class Product
{
[ ]
public ObjectId Id { get; set; }
[ ]
public string Name { get; set; }
[ ]
public int Quantity { get; set; }
[ ]
public string Brand { get; set; }
[ ]
public DateTime MFGD { get; set; }
[ ]
public string Details { get; set; }
}BsonElement
属性是映射实体类与 MongoDB 数据库字段。
MongoDB Atlas 云数据库
上述程序结构准备妥当,现在我们需要连接一个 MongoDB 数据库来对数据进行增删改查,可以自己官方下载后在本地安装配置,不过 MongoDB 官方也提供了一个免费的云托管数据库-MongoDB Atlas,下面申请注册一个账号。
注册账号
进入注册页面,填写个人信息。
创建集群
选择“Shared”免费选项
- 设置用户名和密码用来访问数据库,
- 设置数据库可访问 IP,选择“My Local Environment”,IP Adress 中填入“0.0.0.0/0”,开启所有 IP 访问权限。
云提供商可选择 “AWS”->“Hong Kong”,默认集群选项是“M0 Sandbox (Shared RAM, 512 MB Storage)”
创建数据库和集合
进入集群主页,点击左侧“Database”->“Browser Collections”->”Create Database”
获取数据库连接
点击左侧“Database”->”Connect”->”Connect your application”
在 DRIVER 中选择 “C#/.NET”,VERSION 可选择最新版,然后点击连接字符串后面的复制按钮。
连接数据库
获取到 MongoDB 的数据库连接字符串后回到第二步创建的项目,将代码中的“连接字符串”替换为上一步获取到实际连接字符串。
连接字符串示例:mongodb+srv://UserName:<password>@cluster0.mongodb.net/?retryWrites=true&w=majority
1 | private MongoClient CreateMongoClient() |
增删改查
1 | using dotnet.mongodb; |
插入
1 | var product = new Product() |
删除
1 | _client.Delete<Product>("product",a=>a.Name== "NAC55"); |
修改
1 | var update = Builders<Product>.Update |
查询
1 | var productList= _client.Find<Product>("product", a=>a.Name== "NAC55"); |
总数查询
1 | var result = _client.Count<Product>("product"); |