c# 链接mongdb集群 一 了解mongdb 二 部署集群 三 c#链接mongdb 完成测试 c#链接mongdb 完成测试 此章节继续我们上一章节将的我们开始用程序去链接mondbdb,大家都知道我们链接sqlserver其实用的是微软自己写的驱动。它已经封装了一些对象,要我们去链接。但
c# 链接mongdb集群
一 了解mongdb
二 部署集群
三 c#链接mongdb 完成测试
c#链接mongdb 完成测试
此章节继续我们上一章节将的我们开始用程序去链接mondbdb,大家都知道我们链接sqlserver其实用的是微软自己写的驱动。它已经封装了一些对象,要我们去链接。但是我们链接mondbdb 同样需要一些对象,这个mongdb官网有说明,可以自己去看看或者直接下载我的这里下载 或者在第一章节有些伙伴们已经下载好了
开发驱动文件夹 在 mongo-csharp-driver-master\mongo-csharp-driver-master\src src下面看到驱动项目这里注意,我下载是vs2012的项目,同学们可以根据自己的需要替换net framework 版本
打开项目之后看到 如图所示
编译项目得到
mongodb.bson.dll
mongodb.driver.dll
创建项目,项目配置文件如下
loglevel 为自定义 日记级别 ,这个后面看我的代码
logpath 为日志路径
mongreplicasetname 为副本集名称,其实就是建立集群的时候取的名字。
mongoserveraddress 为集群机器ip列表,我这里是自己的机器开了不同的端口来区别,你可以改成局域网ip
timeout 超时时间,默认貌似是3秒,我这里设置60秒方便调试
链接集群主要代码
/// /// 取得数据库连接字符串 /// /// app.config文件中appsettings节中 appsettings 对应的name /// 数据库连接字符串 private static mongoserver getconnstr() { list servers = new list(); string reg = @^(?'server'\d{1,}.\d{1,}.\d{1,}.\d{1,}):(?'port'\d{1,})$; string[] serverlist = configurationmanager.appsettings[mongoserveraddress].trim().split('|'); foreach (string server in serverlist) { matchcollection mc = regex.matches(server, reg); if (mc != null && mc.count > 0) servers.add(new mongoserveraddress(mc[0].groups[server].tostring(), convert.toint32(mc[0].groups[port].tostring()))); } if (servers == null || servers.count < 1) return null; mongoclientsettings set = new mongoclientsettings(); set.servers = servers; set.replicasetname = configurationmanager.appsettings[mongreplicasetname].trim();//设置副本集名称 int timeout =convertutil.parseint(configurationmanager.appsettings[timeout].trim());//设置副本集名称 set.connecttimeout = new timespan(0, 0, 0, timeout, 0);//设置超时时间为5秒 set.readpreference = new readpreference(readpreferencemode.secondarypreferred); mongoclient client = new mongoclient(set); return client.getserver(); }set.readpreference = new readpreference(readpreferencemode.secondarypreferred); 这句代码可以根据自己需要修改。
其他没有什么注意的地方
数据插入mongdb代码
/// /// mongdb 批量insert语句 /// /// 对象类型 /// 数据库名称 /// 表名称 /// 对象 /// 返回错误 /// public static ienumerable execute(string _databasename, string _collectionname, ienumerable entitys, out string errormsg) { errormsg = string.empty; //取得数据库连接 ienumerable result = null; try { if (null == entitys) return null; //获取连接的服务器集群 _server = getconnstr(); //获取数据库或者创建数据库(不存在的话)。 mongodatabase database = _server.getdatabase(_databasename); using (_server.requeststart(database))//开始连接数据库。 { mongocollection mycollection = database.getcollection(_collectionname); result = mycollection.insertbatch(entitys); } } catch (exception ex) { errormsg = ex.tostring(); } finally { } //记录日志 if (!string.isnullorempty(errormsg)) { logutil.error(commonlib.dbaccess.mongdbaccess, execute, errormsg + \n\r\t); } return result; }
读取mongdb数据代码
/// /// 如果不清楚具体的数量,一般不要用这个函数。 /// /// /// /// public static list getall(string _databasename, string collectionname,out string errormsg) { errormsg = string.empty; list result = new list(); try { //获取连接的服务器集群 _server = getconnstr(); //获取数据库或者创建数据库(不存在的话)。 mongodatabase database = _server.getdatabase(_databasename); using (_server.requeststart(database))//开始连接数据库。 { mongocollection mycollection = database.getcollection(collectionname); result.addrange(mycollection.findall()); } } catch (exception ex ) { errormsg = ex.tostring(); } //记录日志 if (!string.isnullorempty(errormsg)) { logutil.error(commonlib.dbaccess.mongdbaccess, getall, errormsg + \n\r\t); } return result; }
以上是插入和读取代码。
后面运行效果如下
我这里插入了10w条数据 人然后读取10w条数据。效率比sqlserver是快很多。