抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

简介

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

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

{
    "_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

PM> Install-Package MongoDB.Driver -Version 2.17.1

创建 MongoDbHelper 类

这里将 C# 中对 MongoDB 数据库的增删改查封装到 MongoDbHelper 类,便于操作。

  • 插入数据

    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);
    }
  • 删除

    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;
    }
  • 修改

    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);
    }
  • 查询

    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();
    }
  • 总数查询

    public long Count<TDoc>(string collectionName, EstimatedDocumentCountOptions options = null)
    {
        var collection = GetMongoCollection<TDoc>(collectionName);
        return collection.EstimatedDocumentCount(options);
    }

    创建数据实体类

    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

private MongoClient CreateMongoClient()
{
    return new MongoClient("连接字符串");
}


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

    return database;
}

增删改查

using dotnet.mongodb;

MongoDbHelper _client = new("demo");

插入

var product = new Product()
{
    Name = "NAC55",
    Brand = "SONY",
    MFGD = DateTime.Now,
    Quantity = 1,
    Details = "synchronous motor"
};
_client.Insert("product", product);

删除

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

修改

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

查询

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

总数查询

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

CODE

dotnet.mongodb

评论