手机版

如何在中使用MongoDB的教程 网

时间:2021-09-04 来源:互联网 编辑:宝哥软件园 浏览:

什么是MongoDB

MongoDB基于文档存储(不是表),是关系数据库和非关系数据库之间的产物。在非关系数据库中,MongoDB功能最强,也最像关系数据库。他支持的数据结构非常松散,是类似json的bson格式,可以存储复杂的数据类型。Mongo最大的特点就是他支持的查询语言非常强大,语法上有些类似于面向对象的查询语言,几乎可以实现关系数据库中单个表的类似查询的大部分功能,同时还支持对数据建立索引。Mongo主要解决海量数据的访问效率问题。因为Mongo主要支持海量数据存储,所以Mongo还有一个优秀的分布式文件系统GridFS,可以支持海量数据存储。Mongo之所以很受欢迎,是因为它能够支持复杂的数据结构,并且具有强大的数据查询功能。

BSON是MongoDB的数据存储格式。JSON大家都很熟悉,但是BSON是什么呢?BSON基于JSON格式,选择JSON进行转换的主要原因是JSON的通用性和JSON的无schemaless特性。

BSON有以下特点

1.更快的遍历速度

对于JSON格式,过大的JSON结构会导致数据遍历非常慢。在JSON中,如果要跳过一个文档进行数据读取,需要对文档进行扫描,需要匹配麻烦的数据结构,比如匹配括号。BSON对JSON的一个主要改进是,它将JSON的每个元素的长度存储在元素的头部,这样你只需要读取元素的长度,然后就可以直接寻找到指定的点进行读取。

2.操作简单

对于JSON,数据存储是非类型化的。例如,如果要将一个基本值从9修改为10,由于一个字符已更改为两个,因此其后面的所有内容可能需要向后移动一位。使用BSON,您可以将此列指定为数字列,因此无论数字是从9增长到10还是100,我们都只修改存储数字的列,这不会导致总数据长度增加。当然,在MongoDB中,如果数字从整数增加到长整数,数据的总长度仍然会增加。

3.添加了其他数据类型

JSON是一种方便的数据交换格式,但其类型有限。BSON在其基础上增加了“字节数组”数据类型。这使得不再需要将二进制转换为JSON。大大减少了计算开销和数据量。当然,有时由于类型的概念,BSON并没有超过JSON的空间优势。

在MongoDB窗口下安装

MongoDB的安装非常简单。设置安装路径后,将一直持续到安装结束。最大的坑是MongoDB服务的安装。下面是MongoDB安装后的一些配置操作。

1.在根目录下创建数据库路径(数据目录)、日志路径(日志目录)、日志文件(mongo.log文件)和配置路径(conf目录)。我的安装路径是D: \程序文件\mongodb

2.在conf目录下创建一个配置文件mongo.conf,文件内容如下:

logpath=d: \程序文件\ mongodb \ logs \ mongodb.log #日志输出文件路径logappend=true #错误日志采用追加模式,配置此选项后,MongoDB日志将追加到现有日志文件中。默认选项quiet=true #可以过滤掉一些无用的日志信息,而不是创建新的文件日志=true #来启用日志文件。如果需要调试,请设置为false。端口=27017 #默认端口号为27017auth=true #。启用身份验证需要用户名和密码配置才能启动MongoDB。

运行CMD输入命令(注意mongod的路径)

God-config' d: \程序文件\ MongoDB \数据\ conf \ mongo.conf' 3。创建并启动MongoDB服务

如果你每次都按照第三步,岂不是很麻烦?如果根据以下命令创建并启动MongoDB服务,则可以通过windows服务管理MongoDB的启动和关闭

God-config' d: \程序文件\ MongoDB \ data \ conf \ mongo . conf '-install-service name ' MongoDB ' net start MongoDB要测试是否成功,可以在浏览器中输入http://localhost:27017/如果出现下图,说明服务安装成功。

如果需要卸载MongoDB服务并在CMD中运行,

mongod . exe-在移除服务名称‘MongoDB’的初步准备完成后,您可以开始“编码”

如何在中使用MongoDB?网

首先,我介绍MongoDB.Bson.DLL,MongoDB。driver.dll和蒙古数据库。driver.core.dll进入了这个项目。我用的是2.0版本。现在很多文章都介绍了版本1的使用,这也是我写这篇文章的目的。介绍完驱动dll后,我就可以开始清理代码了

部分代码如下

私有静态蒙古客户端客户端;私有静态IMongoDatabase数据库;//本地配置私人警察字符串MongoDBConnectionStr=' MongoDB :///localhost ';//数据库名称私有静态字符串DefaultDataBaseName=' Testpublic MongoDBHelper(){ GetConnection(DefaultDataBaseName);} ///摘要///构造函数指定数据库////summary////param name=' dataBaseName '/param public MongoDBHelper(字符串dataBaseName){ GetConnection(数据库名);} private static void GetConnection(string dataBaseName){ client=new MongoClient(MongoDBConnectionStr);数据库=客户端. GetDatabaSe(DatabaSename);} ///摘要///异步插入一条数据,手动输入集合名称////摘要公共任务InsertAsyncT(字符串集合名称,T obj){ if(数据库==null){ 0引发新的异常('没有指定数据库');} var集合=数据库. getcollection(集合名称);退货收集insertone async(obj);} ///摘要///异步插入一条数据,采用类型T的完全限定名作为集合名称////摘要公共任务InsertAsync(T obj){返回InsertAsync(类型(T)).全名,obj);} ///摘要///异步插入多条数据,手动输入集合名称////摘要公共任务BatchInsertAsyncT(字符串集合名称,IEnumerableT objs){ if(数据库==null){ 0引发新异常('没有指定数据库');} if(objs==null){ 0抛出新的ArgumentException();} var集合=数据库. getcollection(集合名称);退货收集insertmanyAsync} ///摘要///异步插入多条数据,采用类型T的完全限定名作为集合名称////摘要公共任务BatchInsertAsyncT(IEnumerablet objs){ return batchinserasync(类型为(T)).FullName,objs);} ///摘要///插入一条数据////摘要公共void insert T(T obj){ InsertAsync(obj)} .wait();} ///摘要///插入多条数据////summary public void insert t(IEnumerablet objs){ batchinserasync(objs).wait();} ///摘要///MongoDB C#驱动程序的发现方法,返回我明白了。手动输入集合名称////摘要公共ifindfluent,T FindT(字符串集合名称,FilterDefinitionT筛选器,FindOptions选项=null){ if(数据库==null){ 0引发新异常('没有指定数据库');} var集合=数据库. getcollection(集合名称);退货收集。查找(过滤器,选项);} ///摘要///MongoDB C#驱动程序的发现方法,返回我明白了。

采用类型T的完全限定名作为集合名称////摘要公共ifindfluent,T FindT(filterdefinition filter,Find options=null){ return Find(类型为(T)).全名、过滤器、选项);} ///摘要///取符合条件的数据分类中多个排序条件逗号分隔,默认ASC////汇总公共listGet(表达式onFunct,bool条件,int skip,int limit,字符串排序){ return Get(新的listexpression onFunct,bool { condition },skip,limit,sort);} public ListGetT(表达式Funct,bool条件){ return Get(条件,0,0,null);} ///摘要///取符合条件的数据分类中多个排序条件逗号分隔,默认ASC////摘要公共列表Get(listexpressionFunct,bool条件,int skip,int limit,字符串排序){ if(条件==null | |条件.count==0){ conditions=new ListExpressionFunct,bool { x=true };} var builder=BuildersT .过滤;定义变量筛选器=生成器。和(条件。选择(x=构建器。其中);var ret=new LiST();尝试{ listsortdefinition sortDefList=new listsortdefinition();如果(排序!=null) { var sortList=sort .拆分(',');for(var I=0;我排序列表。长度;i ) { var sl=Regex .替换(排序列表[i].Trim(),@'\s ',' ').拆分("");if (sl .长度==1 || (sl .长度=2 sl[1].ToLower()==' ASC '){ sortDefList .添加(BuildersT .算是吧。升序(sl[0]);} else if (sl .长度=2 sl[1].ToLower()=='desc') { sortDefList .添加(BuildersT .算是吧。降序(sl[0]);} } } var sortDef=BuildersT .排序。合并(排序列表);ret=查找(过滤器)。排序(sortDef).跳过。极限ToListAsync().结果;} catch(例外e) { //异常处理}返回ret } public listGet(listexpressionFunct,bool conditions){ return Get(conditions,0,0,null);} 示例代码中只实现了插入和查询功能,后续会将完整代码上传

摘要

本文只记录了MongoDB最基本的使用,并将介绍副本级、主从自动备份等机制和实现。感兴趣的朋友,请继续关注我们,感谢您的支持。

版权声明:如何在中使用MongoDB的教程 网是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。