抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

简介

MongoDB 是一个不同于 MySQL、SQL Server 等传统关系型数据库的面向文档的数据库管理系统,它是由 C++ 语言编写,基于分布式文件存储,为 WEB 应用提供了可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

1
2
3
4
5
6
7
8
9
10
{
"_id": "ObjectId('AAA123')",
"name": "Zerow",
"company": "Myc",
"website": "www.zerow.cn",
"addresses": [
{ "street": "1s", "city": "Wuhan", "cc": "CN" },
{ "street": "8n", "city": "Beijing", "cc": "CN" }
]
}

本文介绍在 .NET 6 环境下创建一个类库项目来实现对 MongoDB 数据库的增删改查,同时我们使用 MongoDB 提供的 云端的数据库服务-MongoDB Atlas,这样就无须在本地安装配置 MongoDB 服务了。

创建 .Net 6 类库项目

新建项目

dotnet-mongodb-project-create

dotnet-mongodb-project-dotnet6

安装包

安装 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
    11
    public 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
    11
    public 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
    11
    public 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
    11
    public 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
    5
    public 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
    15
    public class Product
    {
    [BsonElement("_id")]
    public ObjectId Id { get; set; }
    [BsonElement("name")]
    public string Name { get; set; }
    [BsonElement("quantity")]
    public int Quantity { get; set; }
    [BsonElement("brand")]
    public string Brand { get; set; }
    [BsonElement("MFGD")]
    public DateTime MFGD { get; set; }
    [BsonElement("details")]
    public string Details { get; set; }
    }

    BsonElement 属性是映射实体类与 MongoDB 数据库字段。

MongoDB Atlas 云数据库

上述程序结构准备妥当,现在我们需要连接一个 MongoDB 数据库来对数据进行增删改查,可以自己官方下载后在本地安装配置,不过 MongoDB 官方也提供了一个免费的云托管数据库-MongoDB Atlas,下面申请注册一个账号。

注册账号

进入注册页面,填写个人信息。

创建集群

mongodb-atlas-create

选择“Shared”免费选项

mongodb-atlas-create-free-plan

  • 设置用户名和密码用来访问数据库,
  • 设置数据库可访问 IP,选择“My Local Environment”,IP Adress 中填入“0.0.0.0/0”,开启所有 IP 访问权限。

mongodb-atlas-create-security

云提供商可选择 “AWS”->“Hong Kong”,默认集群选项是“M0 Sandbox (Shared RAM, 512 MB Storage)”

创建数据库和集合

进入集群主页,点击左侧“Database”->“Browser Collections”->”Create Database”

mongodb-atlas-create-database

获取数据库连接

点击左侧“Database”->”Connect”->”Connect your application”

mongodb-atlas-connect-to-cluster

在 DRIVER 中选择 “C#/.NET”,VERSION 可选择最新版,然后点击连接字符串后面的复制按钮。

mongodb-atlas-connect-to-cluster-select-driver

连接数据库

获取到 MongoDB 的数据库连接字符串后回到第二步创建的项目,将代码中的“连接字符串”替换为上一步获取到实际连接字符串。

连接字符串示例:mongodb+srv://UserName:<password>@cluster0.mongodb.net/?retryWrites=true&w=majority

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
private MongoClient CreateMongoClient()
{
return new MongoClient("连接字符串");
}


private MongoDB.Driver.IMongoDatabase GetMongoDatabase()
{
if (database == null)
{
database = CreateMongoClient().GetDatabase(databaseName);
}

return database;
}

增删改查

1
2
3
using dotnet.mongodb;

MongoDbHelper _client = new("demo");

插入

1
2
3
4
5
6
7
8
9
var product = new Product()
{
Name = "NAC55",
Brand = "SONY",
MFGD = DateTime.Now,
Quantity = 1,
Details = "synchronous motor"
};
_client.Insert("product", product);

删除

1
_client.Delete<Product>("product",a=>a.Name== "NAC55");

修改

1
2
3
var update = Builders<Product>.Update
.Set(p => p.Quantity, 12);
_client.Update<Product>("product", a => a.Name == "NAC55", update);

查询

1
2
3
4
5
var productList= _client.Find<Product>("product", a=>a.Name== "NAC55");
foreach (var product in productList)
{
Console.WriteLine(product.Name);
}

总数查询

1
2
var result = _client.Count<Product>("product");
Console.WriteLine(result);

CODE

dotnet.mongodb

评论