MongoDB基础入门003--使用官方驱动操作mongo,C#
本篇先简单介绍一下,使用官方驱动来操作MongoDB。至于MongoDB原生的增删改查语句,且等以后再慢慢学习。
一、操作MongoDB的驱动主要有两个
1.官方驱动:https://github.com/mongodb/mongo-csharp-driver/downloads,更新的还是比较及时的,目前已经支持大部门linq语法。
2.samus驱动:https://github.com/samus/mongodb-csharp/downloads。 这个好像很久都没有更新了,估计是被抛弃了吧。(ps:据说之前使用起来很是nb啊)
驱动的下载:一种方法是,直接使用上面的连接下载。使用vs开发的同学都懂,我们强大的vs有个软件包管理工具(nuget),使用起来非常舒服。现在就介绍如何使用nuget,来安装MongoDB的驱动程序吧。
打开nuget,输入mongo,安装上MongoDB.Driver,mongocsharpdriver即可。请看下图:

二、增删改查操作。
1.新增
static void Main(string[] args)
{
string connectionString = "mongodb://localhost:27017"; var client = new MongoClient(connectionString);
var database = client.GetDatabase("local");
var collection = database.GetCollection<person>("person"); //批量插入1000条数据
for (int i = ; i < ; i++)
{
person p = new person();
p.age = i % + ;
p.createTime = DateTime.Now;
p.name = "rj" + i; collection.InsertOne(p);
} Console.ReadKey();
}
新增1000条数据
2.查询
//根据条件取出一条
var find1 = collection.Find(item => item.name == "rj0").FirstOrDefault();
//取出指定页数
var find2 = collection.AsQueryable().Skip().Take().ToList();
查询
3.修改(ps:Builders<T>是很强大的)
//修改
var query = Builders<person>.Filter.Where(item => item.name == "rj0"); var set = Builders<person>.Update.Set(item => item.name, "abc"); collection.FindOneAndUpdate<person>(query, set);
4.删除
collection.FindOneAndDelete(item => item.name == "abc");
三、基本的增删改查已经演示,下面上传一份整理的MongoDBHelper类。
using MongoDB.Driver;
using MongoDB.Driver.Builders;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using MongoDB.Driver.Linq;
using MongoDB.Bson;
using System.Configuration; namespace MyMongoDB2
{
public class MongoDBHelper
{
private static readonly string connectionString = "mongodb://admin:admin@localhost";// ConfigurationManager.AppSettings["mongodbServerList"]; MongoClientSettings setting = null;
MongoServer server = null; private string databaseName = "test";// string.Empty; private string tableName = "person";//string.Empty; #region 构造函数重载
/// <summary>
/// 默认开启
/// </summary>
public MongoDBHelper() : this(true) { } /// <summary>
/// 默认副本级,指定连接串可实现单个mongodb
/// </summary>
public MongoDBHelper(bool replica) : this(replica, connectionString) { } /// <summary>
/// 默认副本级,指定连接串可实现单个mongodb
/// </summary>
public MongoDBHelper(bool replica, string conn) : this(replica, conn, string.Empty, string.Empty) { } public MongoDBHelper(bool replica, string conn, string databasename)
: this(replica, conn, databasename, string.Empty)
{ } public MongoDBHelper(string databasename, string tablename)
: this(true, connectionString, databasename, tablename)
{ } public MongoDBHelper(string databasename)
: this(databasename, string.Empty)
{ } public MongoDBHelper(bool replica, string conn, string databasename, string tablename)
{
//副本集
if (replica)
{
var ips = conn.Split(';'); var servicesList = new List<MongoServerAddress>(); foreach (var ip in ips)
{
var host = ip.Split(':')[];
var port = Convert.ToInt32(ip.Split(':')[]); servicesList.Add(new MongoServerAddress(host, port));
} setting = new MongoClientSettings()
{
ReplicaSetName = "datamip",
Servers = servicesList
}; server = new MongoClient(setting).GetServer();
}
else
{
//普通的mongodb实例
server = new MongoClient(conn).GetServer();
} this.databaseName = databasename;
this.tableName = tablename;
}
#endregion #region 删除操作 public bool Remove<T>(Expression<Func<T, bool>> func) => Remove<T>(databaseName, tableName, func); public bool Remove<T>(string table, Expression<Func<T, bool>> func) => Remove<T>(databaseName, table, func); public bool Remove<T>(string database, string table, Expression<Func<T, bool>> func)
{
try
{
var db = server.GetDatabase(database); var collection = db.GetCollection<T>(table); var query = Query<T>.Where(func); var result = collection.Remove(query); return Convert.ToInt32(Convert.ToDouble(result.Response["ok"].RawValue)) > ;
}
catch (Exception ex)
{
//LogHelper.WriteLog(string.Format("Remove 失败: {0} ", ex.Message), ex);
return false;
}
} public bool RemoveAll<T>() => RemoveAll<T>(databaseName, tableName); public bool RemoveAll<T>(string table) => RemoveAll<T>(databaseName, table); public bool RemoveAll<T>(string database, string table)
{
try
{
var db = server.GetDatabase(database); var collection = db.GetCollection<T>(table); var result = collection.RemoveAll(); return Convert.ToInt32(Convert.ToDouble(result.Response["ok"].RawValue)) > ;
}
catch (Exception ex)
{
//LogHelper.WriteLog(string.Format("Remove 失败: {0} ", ex.Message), ex);
return false;
}
} #endregion #region 插入操作
public bool Insert<T>(T t) => Insert<T>(databaseName, tableName, t); public bool Insert<T>(string table, T t) => Insert<T>(databaseName, table, t); public bool Insert<T>(string database, string table, T t)
{
try
{
var db = server.GetDatabase(database); //mongodb中的数据库 var collection = db.GetCollection<T>(table); var result = collection.Insert(t); return Convert.ToInt32(Convert.ToDouble(result.Response["ok"].RawValue)) > ;
}
catch (Exception ex)
{
//LogHelper.WriteLog(string.Format("Insert 失败: {0} ", ex.Message), ex);
return false;
}
}
#endregion #region Save操作 【存在就更新,不存在就插入】
public bool Save<T>(T t) => Save<T>(databaseName, tableName, t); public bool Save<T>(string table, T t) => Save<T>(databaseName, table, t); public bool Save<T>(string database, string table, T t)
{
try
{
var db = server.GetDatabase(database); //mongodb中的数据库 var collection = db.GetCollection<T>(table); var result = collection.Save(t); return Convert.ToInt32(Convert.ToDouble(result.Response["ok"].RawValue)) > ;
}
catch (Exception ex)
{
//LogHelper.WriteLog(string.Format("Save 失败: {0} ", ex.Message), ex);
return false;
}
}
#endregion #region 批量插入 public bool InsertBulk<T>(IEnumerable<T> list) => InsertBulk(tableName, list); public bool InsertBulk<T>(string table, IEnumerable<T> list) => InsertBulk<T>(databaseName, table, list); public bool InsertBulk<T>(string database, string table, IEnumerable<T> list)
{
try
{
//如果不判断count,mongodb会抛出异常,所以这里加上一个判断
if (list == null || list.Count() == ) return true; var db = server.GetDatabase(database); //mongodb中的数据库 var collection = db.GetCollection<T>(table); collection.InsertBatch(list); return true;
}
catch (Exception ex)
{
//LogHelper.WriteLog(string.Format("InsertBulk 失败: {0} ", ex.Message), ex); return false;
}
} #endregion #region 查找操作 public List<T> Find<T>(Expression<Func<T, bool>> func) => Find<T>(tableName, func); public List<T> Find<T>(string table, Expression<Func<T, bool>> func) => Find<T>(databaseName, table, func); public List<T> Find<T>(string database, string table, Expression<Func<T, bool>> func)
{
var list = new List<T>(); try
{
var db = server.GetDatabase(database); //mongodb中的数据库 var collection = db.GetCollection<T>(table); list = collection.Find(Query<T>.Where(func)).ToList();
}
catch (Exception ex)
{
//LogHelper.WriteLog(string.Format("Find 失败: {0} ", ex.Message), ex); throw;
} return list;
} public T FindOne<T>(Expression<Func<T, bool>> func) => FindOne<T>(tableName, func); public T FindOne<T>(string table, Expression<Func<T, bool>> func) => FindOne<T>(databaseName, table, func); public T FindOne<T>(string database, string table, Expression<Func<T, bool>> func)
{
var t = default(T); try
{
var db = server.GetDatabase(database); //mongodb中的数据库 var collection = db.GetCollection<T>(table); t = collection.FindOne(Query<T>.Where(func));
}
catch (Exception ex)
{
//LogHelper.WriteLog(string.Format("FindOne 失败: {0} ", ex.Message), ex); throw;
} return t;
} #endregion #region 查找并删除 【只能查找找匹配的第一条】,找到就删除 public T FindOneAndRemove<T>(Expression<Func<T, bool>> func)
=> FindOneAndRemove(databaseName, tableName, func); public T FindOneAndRemove<T>(string table, Expression<Func<T, bool>> func)
=> FindOneAndRemove(databaseName, table, func); public T FindOneAndRemove<T>(string database, string table, Expression<Func<T, bool>> func)
{
T t = default(T); try
{
var db = server.GetDatabase(database); //mongodb中的数据库 var collection = db.GetCollection<T>(table); FindAndRemoveArgs args = new FindAndRemoveArgs(); args.Query = Query<T>.Where(func); var findAndModifyResult = collection.FindAndRemove(args); t = findAndModifyResult.GetModifiedDocumentAs<T>();
}
catch (Exception ex)
{
//LogHelper.WriteLog(string.Format("SearchAndRemove 失败: {0} ", ex.Message), ex);
} return t;
} #endregion #region 目前支持修改一个参数,找到并修改 public T FindOneAndModify<T, A>(Expression<Func<T, bool>> func, Expression<Func<T, A>> arg1key, A arg1value)
=> FindOneAndModify(databaseName, tableName, func, arg1key, arg1value); public T FindOneAndModify<T, A>(string table, Expression<Func<T, bool>> func, Expression<Func<T, A>> arg1key, A arg1value)
=> FindOneAndModify(databaseName, table, func, arg1key, arg1value); public T FindOneAndModify<T, A>(string database, string table, Expression<Func<T, bool>> func, Expression<Func<T, A>> arg1key, A arg1value)
{
T t = default(T); try
{
var db = server.GetDatabase(database); //mongodb中的数据库 var collection = db.GetCollection<T>(table); FindAndModifyArgs args = new FindAndModifyArgs(); args.Query = Query<T>.Where(func); args.Update = Update<T>.Set<A>(arg1key, arg1value); var findAndModifyResult = collection.FindAndModify(args); t = findAndModifyResult.GetModifiedDocumentAs<T>();
}
catch (Exception ex)
{
//LogHelper.WriteLog(string.Format("SearchOneAndModify 失败: {0} ", ex.Message), ex);
} return t;
}
#endregion #region 更新记录 /// <summary>
/// 已指定“批量更新”
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="A"></typeparam>
/// <param name="func"></param>
/// <param name="arg1key"></param>
/// <param name="arg1value"></param>
/// <returns></returns>
public bool Modify<T, A>(Expression<Func<T, bool>> func, Expression<Func<T, A>> arg1key, A arg1value)
=> Modify<T, A>(databaseName, tableName, func, arg1key, arg1value); /// <summary>
/// 已指定“批量更新”
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="A"></typeparam>
/// <param name="table"></param>
/// <param name="func"></param>
/// <param name="arg1key"></param>
/// <param name="arg1value"></param>
/// <returns></returns>
public bool Modify<T, A>(string table, Expression<Func<T, bool>> func, Expression<Func<T, A>> arg1key, A arg1value)
=> Modify<T, A>(databaseName, table, func, arg1key, arg1value); /// <summary>
/// 已指定“批量更新”
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="A"></typeparam>
/// <param name="database"></param>
/// <param name="table"></param>
/// <param name="func"></param>
/// <param name="arg1key"></param>
/// <param name="arg1value"></param>
/// <returns></returns>
public bool Modify<T, A>(string database, string table, Expression<Func<T, bool>> func, Expression<Func<T, A>> arg1key, A arg1value)
{
try
{
var db = server.GetDatabase(database); //mongodb中的数据库 var collection = db.GetCollection<T>(table); var query = Query<T>.Where(func); var update = Update<T>.Set(arg1key, arg1value); var writeConcernResult = collection.Update(query, update, UpdateFlags.Multi); return writeConcernResult.DocumentsAffected > ;
}
catch (Exception ex)
{
//LogHelper.WriteLog(string.Format("Exists 失败: {0} ", ex.Message), ex); throw;
}
} #endregion #region 查询所有数据 public List<T> FindAll<T>() => FindAll<T>(databaseName, tableName); public List<T> FindAll<T>(string table) => FindAll<T>(databaseName, table); public List<T> FindAll<T>(string database, string table)
{
var list = new List<T>(); try
{
var db = server.GetDatabase(database); //mongodb中的数据库 var collection = db.GetCollection<T>(table); list = collection.FindAll().ToList(); return list;
}
catch (Exception ex)
{
//LogHelper.WriteLog(string.Format("FindAll 失败: {0} ", ex.Message), ex); return list;
}
}
#endregion #region 删除数据库/表
public void Drop(MlevelEnum mlevel, string database = null, string table = null)
{
var tempdatabase = database ?? databaseName; var temptable = table ?? tableName; try
{
if (mlevel == MlevelEnum.tableName)
{
var db = server.GetDatabase(tempdatabase); db.DropCollection(temptable);
}
else
{
server.DropDatabase(tempdatabase);
}
}
catch (Exception ex)
{
//LogHelper.WriteLog("DropDatabase失败", ex);
}
} public CommandResult DropDataBaseOrTable(MlevelEnum mlevel, string database = null, string table = null)
{
BsonDocument response = new BsonDocument(); CommandResult result = new CommandResult(response); var tempdatabase = database ?? databaseName; var temptable = table ?? tableName; try
{
if (mlevel == MlevelEnum.tableName)
{
var db = server.GetDatabase(tempdatabase); return db.DropCollection(temptable);
}
else
{
return server.DropDatabase(tempdatabase);
}
}
catch (Exception ex)
{
//LogHelper.WriteLog("DropDatabase失败", ex);
} return result;
} #endregion } public enum MlevelEnum
{
databaseName = ,
tableName =
}
}
MongoDBHelper
MongoDB基础入门003--使用官方驱动操作mongo,C#的更多相关文章
- 使用Mongo官方驱动操作Mongo数据库
首先到 https://github.com/mongodb/mongo-csharp-driver/downloads 下载Mongo官方驱动 下载完成后引用到项目中 public class Co ...
- [转载]在C#中使用官方驱动操作MongoDB
在C#中使用官方驱动操作MongoDB 8.1)下载安装 想要在C#中使用MongoDB,首先得要有个MongoDB支持的C#版的驱动.C#版的驱动有很多种,如官方提供的,samus. 实现思路大都类 ...
- windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)
windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...
- MongoDB基础入门视频教程
MongoDB基础入门视频教程http://www.icoolxue.com/album/show/98
- 在C#中使用官方驱动操作MongoDB
MongoDB的官方驱动下载地址:https://github.com/mongodb/mongo-csharp-driver/releases 目前最新的版本是2.10,支持.NET 4.5以上.由 ...
- 使用MongoDB C#官方驱动操作MongoDB
想要在C#中使用MongoDB,首先得要有个MongoDB支持的C#版的驱动.C#版的驱动有很多种,如官方提供的,samus. 实现思路大都类似.这里我们先用官方提供的mongo-csharp-dri ...
- C#中使用官方驱动操作MongoDB
想要在C#中使用MongoDB,首先得要有个MongoDB支持的C#版的驱动.C#版的驱动有很多种,如官方提供的,samus. 实现思路大都类似.这里我们先用官方提供的mongo-csharp-dri ...
- C#/.NET 使用官方驱动操作MongoDB(一):插入、查询
概述 想要在C#中使用MongoDB,首先得要有个MongoDB支持的C#版的驱动. C#版的驱动有很多,这里我们先用官方提供的 MongoDB.Driver(使用 Nuget 安装),当前版本为2. ...
- MongoDB基础入门002--基本操作,增删改查
一.这里只是演示最基本的操作,更多的信息可以去官网.https://docs.mongodb.com/manual 打开一个cmd,输入mongo命令打开shell,其实这个shell就是mongod ...
随机推荐
- 使用Emit把Datatable转换为对象集合(List<T>)
Emit生成动态方法部分摘自网上,但是经过修改,加入了对委托的缓存以及类结构的调整,使之调用更简洁方便.大致的思路是:要实现转换datatable到某个指定对象的集合,本质是实现转换一个datarow ...
- Java Math 取整的方式
1.Math.floor floor,英文原意:地板. Math.floor 函数是求一个浮点数的地板,就是 向下 求一个最接近它的整数,它的值肯定会小于或等于这个浮点数. 2.Math.ceil c ...
- dd
1.属性 关键:get,set public class Account { private string id; private decimal money; public string Id { ...
- 浅析Yii2的view层设计
Yii2.0的view层提供了若干重要的功能:assets资源管理,widgets小组件,layouts布局... 下面将通过对Yii2.0代码直接进行分析,看一下上述功能都是如何实现的,当然细枝末节 ...
- jquery 拖拽,框选的一点积累
拖拽draggable,框选 selectable,按ctrl多选,临近辅助对齐,从工具栏拖工具 等,和jqueryui的selectable不同,是在一个父div里框选子div(类似框选文件),一 ...
- 前端学PHP之变量
× 目录 [1]变量定义 [2]关键字 [3]变量赋值[4]可变变量[5]变量函数 前面的话 变量是用于临时存储值的容器.这些值可以是数字.文本,或者复杂得多的排列组合.变量在任何编程语言中都居于核心 ...
- EntityFramework之一对一关系(二)
前言 关于表关系园中文章也是数不胜收,但是个人觉得最难攻克的是一对一,对其配置并非无道理可循,只要掌握了原理方可,且听我娓娓道来! 共享主键关系 概念:就是两个表共享相同的主键值,也就是说一表的主键值 ...
- CHECK_NRPE: Received 0 bytes from daemon. Check the remote server logs for error messages.
今天,在用icinga服务器端测试客户端脚本时,报如下错误: [root@mysql-server1 etc]# /usr/local/icinga/libexec/check_nrpe -H 192 ...
- 三行代码接入,社交软件打字时底下弹出的表情布局,自定义ViewPager+页面点标+各种功能的android小框架。
(转载请声明出处:http://www.cnblogs.com/linguanh/) 前言: 接上次分享的 ListView 动态加载类,入口:http://www.cnblogs.com/lingu ...
- 【数据挖掘】朴素贝叶斯算法计算ROC曲线的面积
题记: 近来关于数据挖掘学习过程中,学习到朴素贝叶斯运算ROC曲线.也是本节实验课题,roc曲线的计算原理以及如果统计TP.FP.TN.FN.TPR.FPR.ROC面积等等.往往运用 ...