NoSql数据库初探-mongoDB环境搭建
- NoSQL数据库一改关系型数据库的缺点,更容易的集成、分布式、无模式、故障恢复等特点,正在一步步餐食关系型数据库的市场,作为一个与时俱进的码农了解一下新技术是必须的,尤其是在读了《NoSql精粹》之后,更是想体验一下NoSql数据库的威力。
- MongoDB是一种文档数据库,也就是说对于领域模型中的每一个聚合来讲,都会作为一个文档来存储。
- MongoDB有如下优点:
- 面向文档存储、全索引支持、同步机制和高访问性、自动分片、查询、灵活的聚集和数据处理、映射化简、文件存储。
- 第一步:安装
- 从版本2.2开始,mongoDB就不支持XP操作系统了,蛋疼,现在我就在用XP,看来只能用2.2之前的版本了,
- 可用的版本只有一个2.0.9,我已经共享到百度网盘了,下载地址:http://pan.baidu.com/s/1i3GEs1v,如果下载地址失效了,请去官网下载。
- 第二步:设置数据库环境并启动数据库
- 将压缩版解压之后放到任意一个硬盘上,比如我就放到了E:\mongodb-win32-i386-2.0.9
- 先创建一个存放文档文件的文件夹,E:\mongodb-win32-i386-2.0.9\data此文件夹是用来存放数据文档的
- 创建完成之后,将此文件夹配置到mongoDB,让mongoDB将数据存放到此文件夹。
- 配置并启动数据库:
- 运行命令行:E:\mongodb-win32-i386-2.0.9\bin\mongod.exe --dbpath E:\mongodb-win32-i386-2.0.9\data
- (如果没有指定,mongoDB启动时默认在路径C:\data下存放数据文档)
- 第三步:
- 数据库启动之后,我们就可以连接数据库进行访问并存储数据了
- 另起一个命令窗口并运行:E:\mongodb-win32-i386-2.0.9\bin\mongo.exe --dbpath E:\mongodb-win32-i386-2.0.9\data
- 后面的参数是要连接到的数据目录
- 默认情况下mongoDB会选中一个名叫test的数据库,如果不知道当前所处的数据库,可以运行db命令来查看
- 查看所有的数据库:
- show dbs
- 切换数据库:
- use mydb
- 如果此时切换的数据库不存在,没关系,只要不向该数据库存放数据,mongoDB是不会在硬盘上创建该数据库的。
- 是该存放数据的时候了,先说一下mongoDB中的一些概念。
- mongoDB中有db、collection、document,db就对应关系数据库中的数据库,而collection则对应了关系型数据库中的表,而document就对应了关系型数据库表中的一行数据。mongoDB中的文档就像一个json文件一样,我们可以将一个javascript中的对象字面量创建为一个document,如通过如下方式定义了两个对象变量:
- j = { name : "mongo" }
- k = { x : 3 }
- 将j和k这两个文档存入名为“testData”的collection中
- db.testData.insert( j )
- db.testData.insert( k )
- 前面已经说过了,db为当前所处的数据库对象,而testData是一个collection,此时还没有对应的collection,当insert执行完毕之后,就创建了collection对象
- 我们可以通过
- show collections
- 命令来查看当前数据库中所有的collection
- 此时会返回testData和 system.indexes, system.indexes是mongoDB自己提供的collection,不用管它
- 我们可以通过如下语句查询testData中的所有的数据
- db.testData.find()
- 此时的find方法会返回一个游标对象
- 因为此时并没有一个变量接收该游标对象,所以会默认至多打印出20条数据(当然只会打印刚刚的那两条数据,因为我们的testData中只有这两条)
- { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
- { "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }
- _id属性是mongoDB自动生成的,因为每个文档都要有一个“主键”(跟关系型数据库中主键很像),而此时我们并没有提供_id。
- 我们来试着添加更多的数据:
- 在命令行中输入:
- for (var i = 1; i <= 25; i++) db.testData.insert( { x : i } )
- 一个for循环,循环插入了25条数据
- 我们再执行一下
- db.testData.find()
- 结果输出
- { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
- { "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990be6"), "x" : 1 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990be7"), "x" : 2 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990be8"), "x" : 3 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990be9"), "x" : 4 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990bea"), "x" : 5 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990beb"), "x" : 6 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990bec"), "x" : 7 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990bed"), "x" : 8 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990bee"), "x" : 9 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990bef"), "x" : 10 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990bf0"), "x" : 11 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990bf1"), "x" : 12 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990bf2"), "x" : 13 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990bf3"), "x" : 14 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990bf4"), "x" : 15 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990bf5"), "x" : 16 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990bf6"), "x" : 17 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990bf7"), "x" : 18 }
- has more
- 只输出了20条数据
- 后面还有has more提示后面还有数据
- 再在命令行中输入it会输出下一批20条数据
- 如何才能将数据全部输出呢?
- 此时我们用一个变量来接收游标:
- var c = db.testData.find()
- c就是游标对象
- 此时我们通过for循环将全部数据输出:
- while ( c.hasNext() ) printjson( c.next() )
- printjson方法将文档以json的格式输出
- 游标对象的hasNext方法用来判断是否还有下一个文档,而next方法用来获取下一个文档。
- 如果我们只想获取第5个文档,该怎么办呢?
- 当然可以在遍历游标的时候对遍历过的文档计数,并将第5个文档输出即可,但是这种方式确实是有点啰嗦了。
- 我们此时可以在游标对象上直接添加一个下标即可,如:
- printjson( c [ 4 ] )
- 此时输出了第5个文档
- { "_id" : ObjectId("51a7dc7b2cacf40b79990bea"), "x" : 5 }
- 但是此时请注意:
- c [ 4 ]方法会将所有该collection下的文档读取进内存,这相当于在游标上执行了cursor.toArray() 方法,
此方法将所有的文档加载到了内存中,然后再在返回的数组中查找索引值是4的文档,所以游标下标方法应慎用啊
- 如果我们想查询a是18的那个document该怎么办呢?
- 此时我们还可以借助find方法,但是此时要给find方法提供一个模板文档
- 一个模板文档详细描述了查询策略,如:db.testData.find( { x : 18 } )
- 此时的{x:18}就是一个模板文档,是指查询文档时只保留x为18的文档。
- 查询结果如下:
- { "_id" : ObjectId("51a7dc7b2cacf40b79990bf7"), "x" : 18 }
- 不要忘了,find方法返回一个游标对象,只不过此时的查询只有一个文档符合条件。
- 如果只想返回一个文档,而不是游标对象,可以使用findOne方法,findOne方法返回一个文档对象,不管符合条件的文档有多少个,它只返回第一个。
- 如果想对返回的文档数目进行限制,可以在游标上调用limit方法,如下:
- db.testData.find().limit(3)
- 只会返回前3个文档
- 结果如下:
- { "_id" : ObjectId("51a7dc7b2cacf40b79990be6"), "x" : 1 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990be7"), "x" : 2 }
- { "_id" : ObjectId("51a7dc7b2cacf40b79990be8"), "x" : 3 }
- 下一节:配置MongoDB服务
- 参考链接:http://docs.mongodb.org/manual/
NoSql数据库初探-mongoDB环境搭建的更多相关文章
- NoSql数据库初探-mongoDB读操作
MongoDB以文档的形式来存储数据,此结果类似于JSON键值对.文档类似于编程语言中将键和值关联起来的结构(比如:字典.Map.哈希表.关联数组).MongoDB文档是以BOSN文档的形式存在的.B ...
- 《OD大数据实战》MongoDB环境搭建
一.MongonDB环境搭建 1. 下载 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz 2. 解压 tar -zxvf ...
- MongoDB——环境搭建
项目中需要将一些读多改少的数据存入到 MongoDB 数据库中来提高效率,于是简单学习一些MongoDB数据库的知识,来进行应对,也是对自己知识盲区进行补充.本文主要学习介绍MongoDB数据库在Li ...
- NoSQL 数据库之MongoDB
1.MongoDB简介 1.1什么是MongoDB MongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热门的一种.它介于关系数据库和非关系数据库之间,是非关系数据库当 ...
- MongoDB环境搭建
MongoDB系列第一课:MongDB简介 MongoDB系列第二课:MongDB环境搭建 MongoDB系列第三课:MongDB用户管理 MongoDB系列第四课:MongoDB数据库.集合.文档的 ...
- 第12章—使用NoSQL数据库—使用MongoDB+Jpa操作数据库
使用MongoDB+Jpa操作数据库 SpringData还提供了对多种NoSQL数据库的支持,包括MongoDB;neo4j和redis.他不仅支持自动化的repository,还支持基于模板的数据 ...
- Flutter初探与环境搭建
最近组里有个前端的同事在疯狂学习Flutter,本来上半年就一直想学它,但是..由于个人的原因还有其它的东东想学就一直把它给无限搁置了,为了跟上时代的潮流所以接一来还是下定决定好好将它学一下,毕境如今 ...
- NOSQL数据库之MongoDB
一.NoSQL概述 如今,大多数的计算机系统(包括服务器.PC.移动设备等)都会产生庞大的数据量.其实,早在2012年的时候,全世界每天产生的数据量就达到了2.5EB(艾字节,).这些数据有很大一部 ...
- Windows下MongoDB环境搭建
MongoDB下载 登录MongoDB官网:www.mongodb.org:点击[Download MongoDB]按钮,进入如下所示界面 选择目标操作系统及其版本,比如这里选择的是64位的Windo ...
随机推荐
- 神经网络模型及R代码实现
神经网络基本原理 一.神经元模型 图中x1~xn是从其他神经元传来的输入信号,wij表示表示从神经元j到神经元i的连接权值,θ表示一个阈值 ( threshold ),或称为偏置( bias ).则神 ...
- 一款强大的Android网络渗透软件dsploit
dSploit是一款基于Android系统的功能十分全面强大的网络渗透工具,可以提供给网络安全工作人员检查网络的安全性.小黑这次主要使用了其中的"简易嗅探""会话劫持&q ...
- 【译文】JNI编程
原文链接: https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html 没有逐字翻译,解说了文章的大 ...
- 同步(Synchronous)和异步(Asynchronous)
目录 概念性 图示例 举个例子 回到顶部 概念性 同步和异步通常用来形容一次方法调用. 同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为. 异步方法调用更像一个消息传递,一旦开始 ...
- MySQL自动化运维之用mysqldump和mysqlbinlog实现某一数据库的每周全备和每天差异备份,并添加到执行计划【热备】
案例: 线上有一数据库,需要每周全备一次,每天差备一次[安全起见还是差备吧,不要增备,不要吝啬磁盘哦,而且差备恢复还很快] 1.每周对数据库hellodb做完全备份 crontab任务计划: * * ...
- java从基础知识(九)I/O
java中的流可以从不同的角度进行分类 按流的方向:输入流.输出流(注意这里的输入(read).输出是相对于程序而言的(writer),个人认为从读.写角度理解更为直观) 按处理数据单位:字节流.字符 ...
- linux centos 6.5下安装nodejs
1.将文件下载或拷贝至/usr/local/src目录下,可使用xshell工具上传文件 2.解压缩文件: tar xvf /usr/local/src/node-v6.9.2-linux-x64 3 ...
- js时间Date对象介绍及解决getTime转换为8点的问题
前言 在做时间转换的时候,发现用“2016-04-12”转出来的时间戳是 2016-04-12 08:00的时间点,而不是0点. new Date('2016-04-12').getTime(); ) ...
- CSS 中关于background 属性功能
background 是 css中的核心属性,我们对他应该充分了解. background-image 定义背景图像 这个属性是我们用的最多的属性 设置背景图像有两个方式 background: ...
- WebView-存在的内存泄漏
0. Notice - earlier version 要使用WebView不造成内存泄漏,首先应该做的就是不能在xml中定义webview节点,而是在需要的时候动态生成.即:可以在使用WebView ...