MongoDB系列文章之C#玩转它(1/3)

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

涉及知识点


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

  • C#面向对象基础知识,WinForm基础编程。

MongoDB驱动安装


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

MongoDB系列文章之C#玩转它(1/3)

示例截图


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

MongoDB系列文章之C#玩转它(1/3)

新增功能

MongoDB系列文章之C#玩转它(1/3)

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的基础操作,旨在抛砖引玉,共同进步。