本文档描述定义的uri格式之间,以及应用程序和mongodb实例的连接,参考官方mongodb的驱动。 原文 :http://docs.mongodb.org/manual/reference/connection-string/#connections-connection-options 标准连接字符串格式 本节描述的标准格式连接mongodburi用于
本文档描述定义的uri格式之间,以及应用程序和mongodb实例的连接,参考官方mongodb的驱动。
原文 :http://docs.mongodb.org/manual/reference/connection-string/#connections-connection-options
标准连接字符串格式本节描述的标准格式连接mongodburi用于连接mongodb数据库服务器。所有官方mongodb的格式都是相同的驱动程序。对于驱动和驱动的链接文档的列表,看到mongodb驱动和客户端库(mongodb drivers and client libraries)
以下是标准的链接方式
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostn[:portn]]][/[database][?options]]
参数说明:
mongodb://字符串链接的标准格式
username:password@
可选的,一般默认是没有名称和密码的,只有在mongodb服务器使用了身份验证时才出现。
/database
可选的,如果链接的字符串中包含了验证身份的用户名和密码,则数据库是必须要有的。若没有包含数据库名称,默认是链接admin的数据库
?options
链接特定选项。如果没有指定链接特定的数据库名称,必须在主机名后面加/,并且在optin的前面以问号形式开头?.
实例:
mongodb://db1.example.net,db2.example.net:2500/?replicaset=test
继续查找发现了另一篇文章。只做重点翻译:
内部认证当你只需要一个用户,它在连接字符串中指定这是可能的。
var connectionstring =mongodb://user1:password1@localhost/test;var mongoclient = newmongoclient(connectionstring); 注意: 如果你不指定一个数据库连接字符串,默认的数据库是“admin”数据库.
看到这里心里狂喜,终于可以进行配置文件的设置了,但是发现c#的驱动并不支持这样的编写,于是又是一个失落。
链接原理:链接数据库,官方提供了两种线程安全的方式,一个是mongoclient, 另一个是mongoserver,都是线程安全的,自动进行锁定的。
利用服务端类链接数据库
// create server settings to passconnection string, timeout, etc.
mongoserversettingssettings =newmongoserversettings();
settings.server = new mongoserveraddress(localhost,27017);
// create server object tocommunicate with our server
mongoserver server = new mongoserver(settings);
// get our databaseinstance to reach collections and data
var database = server.getdatabase(messagedb);
客户端类链接数据库的实例
var client = new mongoclient(mongodb://localhost:27017);var server = client.getserver();var database = server.getdatabase(foo);var collection = database.getcollection(bar);
以上的两种链接方式我都做个测试。并且都可以用。这是一般更倾向于客户端的链接方式。
通过查找api,发现客户端的类的构造方法还有其他的
public mongoclient(); public mongoclient(mongoclientsettingssettings); public mongoclient(mongourl url); public mongoclient(stringconnectionstring);
我们通常用的是string字符串的链接,这次对mongoclientsettings进行的深度的查找调用发mongoclientsettings 是可以进行更多的参数设置的,和option类似,于是找到了解决方案,通过配置文件对mongoclientsettings进行参数设置。
默认情况下,最大链接池是100,最小是0,数据库链接是本地的。下面我们看测试
mongoclientsettings settingsclient = newmongoclientsettings();//实例化客户端设置类
红色划线部分是默认的参数,当我们不填写任何参数,驱动程序是进行默认的参数设置的。
通过客户端类的参数设置可以发现已经有所不同了。
那代码是如何编写的呢
#region 读取配置文件信息 //获取链接池大小 int connectionpool =convert.toint32(configurationmanager.appsettings[connectionpool]); int minpool =convert.toint32(configurationmanager.appsettings[minpool]); string hostname =configurationmanager.appsettings[hostname]; int32 port =convert.toint32(configurationmanager.appsettings[port]); string database =configurationmanager.appsettings[database]; #endregion if (string.isnullorempty(connectionstring)) { throw newargumentnullexception(connection string not found.); } #region 客户端类设置 mongoserveraddress ipaddress = newmongoserveraddress(hostname, port);//设置服务器的ip和端口 mongoclientsettings settingsclient= new mongoclientsettings();//实例化客户端设置类 settingsclient.server =ipaddress;//端口赋值 settingsclient.maxconnectionpoolsize = connectionpool; settingsclient.minconnectionpoolsize = minpool; settingsclient.connectionmode =0;//链接模式设置 // mongourl url=newmongourl(connectionstring); mongoclient client = newmongoclient(settingsclient);//调用客户端类构造函数设置参数 mongoserver server =client.getserver();//服务端获取客户端参数 db =server.getdatabase(database);//获取数据库名称 #endregion
刚开始我也是不知道如何进行参数赋值,只是在一步步的操作中发现参数是有类型的,一些类型是一些引用类,就需要实例化赋值。所以才有最后看起来很多的参数。
配置文件中的信息
当然了客户端的方式写出来了。服务端也就容易的很多了
#region 服务端链接设置 mongoserversettings mongosetting =new mongoserversettings(); //mongosetting.server = newmongoserveraddress(connectionstring, connectionpool); mongosetting.maxconnectionpoolsize= connectionpool;//设定最大连接池 mongosetting.server = newmongoserveraddress(hostname, port); mongoserver server =mongoserver.create(mongosetting);//创建连接数据文件 db = server.getdatabase(database); #endregion
认识:由于该数据库的参考资料比较少,所以多数资料还是外文,刚开始看到很是惊讶,如此多的英语能看的明白么。但是只要心境平静,一切都是可以的。通过基本的查找和一些外文论坛了解的基本的设置。很像sql的设置,但是又不同,需要进行代码设置,这是这个代码的参数可以写在配置文件中。这次的资料查找我深刻认识到,英语是非常非常重要的工具,如果你想更深入的了解,英语是必不可少的利器。