C# 玩转MongoDB(一)

随着NoSQL的应用越来越广泛,很多面试都需要熟悉了解NoSQL【如:Redis,MongoDB等】,本文以一个简单的小例子,简述如何通过C#来操作MongoDB,进行数据的读写操作,仅供学习分享使用,如有不足之处,还请指正。

涉及知识点

  • MongoDB的基础知识,CRUD(增删改查)等【关于MongoDB的基础知识,如果不太了解的,可参考前面几篇博文】。
  • C#面向对象基础知识,WinForm基础编程。

MongoDB驱动安装

项目–右键–管理Nuget程序包–打卡Nuget包管理器–浏览搜索MongoDB.Driver–安装。如下所示:

C# 玩转MongoDB(一)

示例截图

示例虽小,实现了查询,条件查询,明细显示,新增等功能,如下所示:

C# 玩转MongoDB(一)

新增功能

C# 玩转MongoDB(一)

C#操作MongoDB步骤

 其实关于数据库的操作步骤,基本上大同小异,如下所示:

  1. 连接服务,得到客户端
  2. 获取要使用的数据库
  3. 获取操作的集合
  4. 执行命令

核心源码

为了代码的公用,本例对MongoDB的操作代码进行了封装,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MongoDB.Driver;
using MongoDB.Bson;
using MongoDB.Bson.Serialization;
using System.Web.Script.Serialization;

namespace DemoMongo.Common
{
    /// <summary>
    /// Mongo帮助类
    /// </summary>
    public class MongoHelper<T>
    {
        private string connStr = "";//服务器网址

        private string dbName = "";//数据库名称

        private IMongoClient client;//连接客户端

        private IMongoDatabase db;//连接数据库

        private string collName ;//集合名称

        public MongoHelper() {

        }

        public MongoHelper(string connStr,string dbName,string collName) {
            this.connStr = connStr;
            this.dbName = dbName;
            this.collName = collName;
            this.Init();
        }

        /// <summary>
        /// 初始化连接客户端
        /// </summary>
        private void Init()
        {
            if (client == null)
            {
                client = new MongoClient(this.connStr);
            }
            if (db == null) {
                db = client.GetDatabase(this.dbName);
            }
        }

        /// <summary>
        /// 插入对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        public void Insert(T obj)
        {
            IMongoCollection<T> collention = db.GetCollection<T>(collName);
            collention.InsertOneAsync(obj);
        }

        /// <summary>
        /// 字典形式插入
        /// </summary>
        /// <param name="dicInfo"></param>
        public void Insert(Dictionary<string,string> dicInfo)
        {
            var collection = db.GetCollection<BsonDocument>(collName);
            var document = new BsonDocument(dicInfo);
            collection.InsertOne(document);
        }

        /// <summary>
        /// 无条件查询,即返回全部
        /// </summary>
        /// <returns></returns>
        public List<T> Query() {
            var collection = db.GetCollection<BsonDocument>(collName);
            var rest =  collection.Find(Builders<BsonDocument>.Filter.Empty);
            return rest.As<T>().ToList();
        }

        /// <summary>
        /// 按名称进行查询
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public List<T> Query(object name) {
            var collection = db.GetCollection<T>(collName);
            var rest = collection.Find(Builders<T>.Filter.Eq("name",name));
            return rest.As<T>().ToList();
        }


        /// <summary>
        /// 只查询一条
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public string QueryOne(string Id) {
            var collection = db.GetCollection<T>(collName);
            var rest = collection.Find(Builders<T>.Filter.Eq("Id",new ObjectId(Id))).Limit(1);

            T t = rest.As<T>().ToList()[0];
            JavaScriptSerializer jserializer = new JavaScriptSerializer();
            string strJson = jserializer.Serialize(t);
            return strJson;
        }
    }
}

代码调用

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DemoMongo.Common;

namespace DemoMongo
{
    public partial class FrmMain : Form
    {
        private MongoHelper<Student> helper;

        public FrmMain()
        {
            InitializeComponent();
            string connStr = ConfigurationManager.AppSettings["connStr"];
            string dbName = ConfigurationManager.AppSettings["dbName"];
            string collName = "student";
            helper = new MongoHelper<Student>(connStr,dbName,collName);

        }

        private void FrmMain_Load(object sender, EventArgs e)
        {
            List<Student> list = helper.Query();
            this.dgView.AutoGenerateColumns = false;
            this.bsView.DataSource = list;
            this.dgView.DataSource = bsView;
        }

        private void btnQuery_Click(object sender, EventArgs e)
        {
            string name = this.txtName.Text.Trim();

            List<Student> list = new List<Student>();
            if (string.IsNullOrEmpty(name))
            {
                list = helper.Query();
            }
            else {
                //注意:此处姓名在MongoDB中存储的数据类型不是固定的,可能是字符串也可能是整数,所以需要判断,否则查询不出来
                int name1 = 0;
                if (int.TryParse(name, out name1))
                {
                    list = helper.Query(name1);
                }
                else {
                    list = helper.Query(name);
                }

            }
            this.dgView.AutoGenerateColumns = false;
            this.bsView.DataSource = list;
            this.dgView.DataSource = bsView;
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            FrmAdd add = new FrmAdd(this.helper);
            add.ShowDialog();
            btnQuery_Click(sender, e);
        }

        private void dgView_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            //只有当第0列被点击时才生效
            if (e.ColumnIndex == 0)
            {
                string id = ((Student)dgView.CurrentRow.DataBoundItem).Id.ToString();
                string student = helper.QueryOne(id);
                this.txtContent.Text = JsonHelper.ConvertJsonString(student);
            }
        }

    }
}

以上就是C#对于MongoDB的基础操作,旨在抛砖引玉,共同进步。

备注

踏莎行·候馆梅残【作者】欧阳修 【朝代】宋 

候馆梅残,溪桥柳细。草薰风暖摇征辔。离愁渐远渐无穷,迢迢不断如春水。

寸寸柔肠,盈盈粉泪。楼高莫近危阑倚。平芜尽处是春山,行人更在春山外。

C# 玩转MongoDB(一)
C# 玩转MongoDB(一)
作者:Alan.hsiang
出处:http://www.cnblogs.com/hsiang/
本文版权归作者和博客园共有,写文不易,支持原创,欢迎转载【点赞】,转载请保留此段声明,且在文章页面明显位置给出原文连接,谢谢。
关注个人公众号,定时同步更新技术及职场文章

原文出处:博客园【Alan.hsiang】

原文链接:https://www.cnblogs.com/hsiang/archive/2021/10/07/15374424.html

本文观点不代表Dotnet9立场,转载请联系原作者。

发表评论

登录后才能评论