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