隐藏

C#中的MongoDB

发布:2023/7/20 16:36:59作者:管理员 来源:本站 浏览次数:505

   MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

   MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。


关系型数据库(RDBMS)遵循ACID规则(事务)


   A(Atomicity)原子性C(Consistency)一致性I(Isolation)独立性D(Durability)持久性


分布式计算系统-CAP定理


在计算机科学中, CAP定理(CAP theorem), 指出对于一个分布式计算系统来说,不可能同时满足以下三点:


   一致性(Consistency) (所有节点在同一时间具有相同的数据)可用性(Availability) (保证每个请求不管成功或者失败都有响应)分区容错性(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)


CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。


因此,根据 CAP 原理将 NoSQL 数据库分成了满足 CA 原则、满足 CP 原则和满足 AP 原则三大类:


   CA - 单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。CP - 满足一致性,分区容忍性的系统,通常性能不是特别高。AP - 满足可用性,分区容忍性的系统,通常可能对一致性要求低一些。


Docker安装MongoDB


# Run MongoDB镜像

docker run -itd --name mongo -p 27017:27017 mongo --auth


# 设置密码

$ docker exec -it mongo mongo admin

# 创建一个名为 admin,密码为 123456 的用户。

>  db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});

# 尝试使用上面创建的用户信息进行连接。

> db.auth('admin', '123456')


C# 操作MongoDB


# 安装依赖

dotnet add package MongoDB.Driver --version 2.19.0


using System;

using System.Collections.Generic;

using System.Threading.Tasks;

using MongoDB.Bson;

using MongoDB.Driver;


namespace MongoDBDemo

{

   class Program

   {

       static void Main(string[] args)

       {

           string connectionString = "mongodb://127.0.0.1:27017";

           MongoClient mongoClient = new MongoClient(connectionString);


           MongoCredential credential;

           credential = MongoCredential.CreateCredential("sampleUser", "myDb", "password");

           Console.WriteLine("Connected to the database successfully!");


           IMongoDatabase database = mongoClient.GetDatabase("myDB");


           const string collectionName = "tutorial3";

           var collection = database.GetCollection<BsonDocument>(collectionName);

           Console.WriteLine("Select collection successfully!");


           BsonDocument document1 = new BsonDocument("title", "MongoDB")

               .Add("description", "database")

               .Add("likes", 100)

               .Add("url", "www.Test.net")

               .Add("by", "Test");

           BsonDocument document2 = new BsonDocument("title", "html")

               .Add("description", "database")

               .Add("likes", 200)

               .Add("url", "www.Test.net/html")

               .Add("by", "Test");

           List<BsonDocument> list = new List<BsonDocument>();

           list.Add(document1);

           list.Add(document2);

           collection.InsertMany(list);


           var filter = new BsonDocument();

           var list2 = Task.Run(async () => await collection.Find(filter).ToListAsync()).Result;

           list2.ForEach(p =>

           {

               Console.WriteLine(p);

           });

           Console.ReadKey();

       }

   }

}


另外,一般情况下,会在对MongoDB的基础操作上,进行二次封装为MongodbHelper,以供业务逻辑的调用。

参考


   MongoDB 教程Docker 安装 MongoDBC#操作MongoDBMongodbHelper