隐藏

C#如何使用MongoDB

发布:2023/7/6 14:59:03作者:管理员 来源:本站 浏览次数:317

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

涉及知识点


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

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


MongoDB驱动安装


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


示例截图


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




新增功能



C#操作MongoDB步骤


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


   连接服务,得到客户端

   获取要使用的数据库

   获取操作的集合

   执行命令


核心源码


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

复制代码



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