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 ...
随机推荐
- Java 8函数编程轻松入门
函数接口介绍 在Java1.8中,新增了Lambda表达式.在.net3.5(C# 3.0)在原先的匿名方法基础上演变出了Lambda表达式.学过C# Lambda表达式的同学,对于Java的Lamb ...
- Sublime Text3 配置 NodeJs 环境
前言 大家都知道,Sublime Text 安装插件一般从 Package Control 中直接安装即可,当我安装 node js 插件时候,直接通过Package Control 安装,虽然插件安 ...
- js中的块作用域
今天我们来一起研究下JavaScript中的变量作用域问题,话不多说,直接上代码. <script type="text/javascript"> (function( ...
- MindManger 2016 64位 破解版
下载地址:http://pan.baidu.com/s/1mi7xkIO 如果失效请去 “毒逆天吧” 发个求助帖即可就有人补上
- android的logcat详细用法
Android日志系统提供了记录和查看系统调试信息的功能.日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命 令来查看和使用. 使用logcat命令 你可以用 logc ...
- 使用pudb调试python
本博客主要用于讲解如何使用pudb进行python调试: 1.安装 sudo pip install pudb pip list查看安装结果: 2.使用 测试程序: #!/usr/bin/env py ...
- MVC4做网站后台:模块管理1、修改模块信息
网站可能会包含一些模块:像文章.产品.图片.留言等. 栏目模块主要实现功能,启用或禁用模块,模块权限设置,模块上传设置等. 权限设置和上传设置以后专门考虑,先来显示或禁用模块. 1.在顶部导航栏添加管 ...
- Android探索之BroadcastReceiver具体使用以及安全性探究
前言: 最近的计划是学习一下iOS的NSNotificationCenter,突然想起来的Android的广播机制,所以还是觉得先对BroadcastReceiver来个全面的总结然后再去学习NSNo ...
- JavaScript之糟粕
0.导言 在上篇<JavaScript之毒瘤>中,列举了一些在JavaScript中难以避免的问题特性.本篇将会展示JavaScript中有问题的特性,但我们很容易就能便面它们.通过这些简 ...
- react+redux教程(三)reduce()、filter()、map()、some()、every()、...展开属性
reduce().filter().map().some().every()....展开属性 这些概念属于es5.es6中的语法,跟react+redux并没有什么联系,我们直接在https:// ...