随着NoSQL的应用越来越广泛,很多面试都需要熟悉了解NoSQL【如:Redis,MongoDB等】,本文以一个简单的小例子,简述如何通过C#来操作MongoDB,进行数据的读写操作,仅供学习分享使用,如有不足之处,还请指正。.
涉及知识点
-
MongoDB的基础知识,CRUD(增删改查)等【关于MongoDB的基础知识,如果不太了解的,可参考前面几篇博文】。
-
C#面向对象基础知识,WinForm基础编程。
MongoDB驱动安装
项目--右键--管理Nuget程序包--打卡Nuget包管理器--浏览搜索MongoDB.Driver--安装。如下所示:

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

新增功能

C#操作MongoDB步骤
关于数据库的操作步骤,基本上大同小异,如下所示:
-
连接服务,得到客户端
-
获取要使用的数据库
-
获取操作的集合
-
执行命令
核心源码
为了代码的公用,本例对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的基础操作,旨在抛砖引玉,共同进步。