1.   NoSQL数据库一改关系型数据库的缺点,更容易的集成、分布式、无模式、故障恢复等特点,正在一步步餐食关系型数据库的市场,作为一个与时俱进的码农了解一下新技术是必须的,尤其是在读了《NoSql精粹》之后,更是想体验一下NoSql数据库的威力。
  1.   MongoDB是一种文档数据库,也就是说对于领域模型中的每一个聚合来讲,都会作为一个文档来存储。
  1.   MongoDB有如下优点:
  1.   面向文档存储、全索引支持、同步机制和高访问性、自动分片、查询、灵活的聚集和数据处理、映射化简、文件存储。
  1.  
  1. 第一步:安装
  1.   从版本2.2开始,mongoDB就不支持XP操作系统了,蛋疼,现在我就在用XP,看来只能用2.2之前的版本了,
  1. 可用的版本只有一个2.0.9,我已经共享到百度网盘了,下载地址:http://pan.baidu.com/s/1i3GEs1v,如果下载地址失效了,请去官网下载。
  1.  
  1. 第二步:设置数据库环境并启动数据库
  1.   将压缩版解压之后放到任意一个硬盘上,比如我就放到了E:\mongodb-win32-i386-2.0.9
  1. 先创建一个存放文档文件的文件夹,E:\mongodb-win32-i386-2.0.9\data此文件夹是用来存放数据文档的 
  1. 创建完成之后,将此文件夹配置到mongoDB,让mongoDB将数据存放到此文件夹。
  1.   配置并启动数据库:
  1.   运行命令行:E:\mongodb-win32-i386-2.0.9\bin\mongod.exe --dbpath E:\mongodb-win32-i386-2.0.9\data
  1.   (如果没有指定,mongoDB启动时默认在路径C:\data下存放数据文档)
  1.  
  1. 第三步:
  1.   数据库启动之后,我们就可以连接数据库进行访问并存储数据了
  1.   另起一个命令窗口并运行:E:\mongodb-win32-i386-2.0.9\bin\mongo.exe --dbpath E:\mongodb-win32-i386-2.0.9\data
  1.   后面的参数是要连接到的数据目录
  1.   默认情况下mongoDB会选中一个名叫test的数据库,如果不知道当前所处的数据库,可以运行db命令来查看
  1.   查看所有的数据库:
  1. show dbs
  1.   切换数据库:
  1. use mydb
  1.   如果此时切换的数据库不存在,没关系,只要不向该数据库存放数据,mongoDB是不会在硬盘上创建该数据库的。
  1.  
  1.   是该存放数据的时候了,先说一下mongoDB中的一些概念。
  1.   mongoDB中有dbcollectiondocumentdb就对应关系数据库中的数据库,而collection则对应了关系型数据库中的表,而document就对应了关系型数据库表中的一行数据。mongoDB中的文档就像一个json文件一样,我们可以将一个javascript中的对象字面量创建为一个document,如通过如下方式定义了两个对象变量:
  1. j = { name : "mongo" }
  2. k = { x : 3 }
  1.  
  1.   将jk这两个文档存入名为“testData”的collection
  1. db.testData.insert( j )
  2. db.testData.insert( k )
  1.   前面已经说过了,db为当前所处的数据库对象,而testData是一个collection,此时还没有对应的collection,当insert执行完毕之后,就创建了collection对象
  1. 我们可以通过
  1. show collections
  1.  
  1. 命令来查看当前数据库中所有的collection
  1. 此时会返回testData system.indexes system.indexesmongoDB自己提供的collection,不用管它
  1. 我们可以通过如下语句查询testData中的所有的数据
  1. db.testData.find()
  1. 此时的find方法会返回一个游标对象
  1. 因为此时并没有一个变量接收该游标对象,所以会默认至多打印出20条数据(当然只会打印刚刚的那两条数据,因为我们的testData中只有这两条)
  1. { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
  2. { "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }
  1. _id属性是mongoDB自动生成的,因为每个文档都要有一个“主键”(跟关系型数据库中主键很像),而此时我们并没有提供_id
  1. 我们来试着添加更多的数据:
  1. 在命令行中输入:
  1. for (var i = 1; i <= 25; i++) db.testData.insert( { x : i } )
  1. 一个for循环,循环插入了25条数据
  1. 我们再执行一下
  1. db.testData.find()
  1. 结果输出
  1. { "_id" : ObjectId("4c2209f9f3924d31102bd84a"), "name" : "mongo" }
  2. { "_id" : ObjectId("4c2209fef3924d31102bd84b"), "x" : 3 }
  3. { "_id" : ObjectId("51a7dc7b2cacf40b79990be6"), "x" : 1 }
  4. { "_id" : ObjectId("51a7dc7b2cacf40b79990be7"), "x" : 2 }
  5. { "_id" : ObjectId("51a7dc7b2cacf40b79990be8"), "x" : 3 }
  6. { "_id" : ObjectId("51a7dc7b2cacf40b79990be9"), "x" : 4 }
  7. { "_id" : ObjectId("51a7dc7b2cacf40b79990bea"), "x" : 5 }
  8. { "_id" : ObjectId("51a7dc7b2cacf40b79990beb"), "x" : 6 }
  9. { "_id" : ObjectId("51a7dc7b2cacf40b79990bec"), "x" : 7 }
  10. { "_id" : ObjectId("51a7dc7b2cacf40b79990bed"), "x" : 8 }
  11. { "_id" : ObjectId("51a7dc7b2cacf40b79990bee"), "x" : 9 }
  12. { "_id" : ObjectId("51a7dc7b2cacf40b79990bef"), "x" : 10 }
  13. { "_id" : ObjectId("51a7dc7b2cacf40b79990bf0"), "x" : 11 }
  14. { "_id" : ObjectId("51a7dc7b2cacf40b79990bf1"), "x" : 12 }
  15. { "_id" : ObjectId("51a7dc7b2cacf40b79990bf2"), "x" : 13 }
  16. { "_id" : ObjectId("51a7dc7b2cacf40b79990bf3"), "x" : 14 }
  17. { "_id" : ObjectId("51a7dc7b2cacf40b79990bf4"), "x" : 15 }
  18. { "_id" : ObjectId("51a7dc7b2cacf40b79990bf5"), "x" : 16 }
  19. { "_id" : ObjectId("51a7dc7b2cacf40b79990bf6"), "x" : 17 }
  20. { "_id" : ObjectId("51a7dc7b2cacf40b79990bf7"), "x" : 18 }
  21. has more
  1. 只输出了20条数据
  1. 后面还有has more提示后面还有数据
  1. 再在命令行中输入it会输出下一批20条数据
  1.  
  1. 如何才能将数据全部输出呢?
  1. 此时我们用一个变量来接收游标:
  1. var c = db.testData.find()
  1. c就是游标对象
  1. 此时我们通过for循环将全部数据输出:
  1. while ( c.hasNext() ) printjson( c.next() )
  1. printjson方法将文档以json的格式输出
  1.  
  1. 游标对象的hasNext方法用来判断是否还有下一个文档,而next方法用来获取下一个文档。
  1.  
  1. 如果我们只想获取第5个文档,该怎么办呢?
  1. 当然可以在遍历游标的时候对遍历过的文档计数,并将第5个文档输出即可,但是这种方式确实是有点啰嗦了。
  1. 我们此时可以在游标对象上直接添加一个下标即可,如:
  1. printjson( c [ 4 ] )
  1. 此时输出了第5个文档
  1. { "_id" : ObjectId("51a7dc7b2cacf40b79990bea"), "x" : 5 }
  1. 但是此时请注意:
  1. [ 4 ]方法会将所有该collection下的文档读取进内存,这相当于在游标上执行了cursor.toArray() 方法,
    此方法将所有的文档加载到了内存中,然后再在返回的数组中查找索引值是4的文档,所以游标下标方法应慎用啊
  1.  
  1. 如果我们想查询a18的那个document该怎么办呢?
  1. 此时我们还可以借助find方法,但是此时要给find方法提供一个模板文档
  1. 一个模板文档详细描述了查询策略,如:db.testData.find( { x : 18 } )
  1. 此时的{x:18}就是一个模板文档,是指查询文档时只保留x18的文档。
  1. 查询结果如下:
  1. { "_id" : ObjectId("51a7dc7b2cacf40b79990bf7"), "x" : 18 }
  1.  
  1. 不要忘了,find方法返回一个游标对象,只不过此时的查询只有一个文档符合条件。
  1.  
  1. 如果只想返回一个文档,而不是游标对象,可以使用findOne方法,findOne方法返回一个文档对象,不管符合条件的文档有多少个,它只返回第一个。
  1.  
  1. 如果想对返回的文档数目进行限制,可以在游标上调用limit方法,如下:
  1. db.testData.find().limit(3)
  1. 只会返回前3个文档
  1. 结果如下:
  1. { "_id" : ObjectId("51a7dc7b2cacf40b79990be6"), "x" : 1 }
  2. { "_id" : ObjectId("51a7dc7b2cacf40b79990be7"), "x" : 2 }
  3. { "_id" : ObjectId("51a7dc7b2cacf40b79990be8"), "x" : 3 }
  1. 参考链接:http://docs.mongodb.org/manual/

NoSql数据库初探-mongoDB环境搭建的更多相关文章

  1. NoSql数据库初探-mongoDB读操作

    MongoDB以文档的形式来存储数据,此结果类似于JSON键值对.文档类似于编程语言中将键和值关联起来的结构(比如:字典.Map.哈希表.关联数组).MongoDB文档是以BOSN文档的形式存在的.B ...

  2. 《OD大数据实战》MongoDB环境搭建

    一.MongonDB环境搭建 1. 下载 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz 2. 解压 tar -zxvf ...

  3. MongoDB——环境搭建

    项目中需要将一些读多改少的数据存入到 MongoDB 数据库中来提高效率,于是简单学习一些MongoDB数据库的知识,来进行应对,也是对自己知识盲区进行补充.本文主要学习介绍MongoDB数据库在Li ...

  4. NoSQL 数据库之MongoDB

    1.MongoDB简介 1.1什么是MongoDB MongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热门的一种.它介于关系数据库和非关系数据库之间,是非关系数据库当 ...

  5. MongoDB环境搭建

    MongoDB系列第一课:MongDB简介 MongoDB系列第二课:MongDB环境搭建 MongoDB系列第三课:MongDB用户管理 MongoDB系列第四课:MongoDB数据库.集合.文档的 ...

  6. 第12章—使用NoSQL数据库—使用MongoDB+Jpa操作数据库

    使用MongoDB+Jpa操作数据库 SpringData还提供了对多种NoSQL数据库的支持,包括MongoDB;neo4j和redis.他不仅支持自动化的repository,还支持基于模板的数据 ...

  7. Flutter初探与环境搭建

    最近组里有个前端的同事在疯狂学习Flutter,本来上半年就一直想学它,但是..由于个人的原因还有其它的东东想学就一直把它给无限搁置了,为了跟上时代的潮流所以接一来还是下定决定好好将它学一下,毕境如今 ...

  8. NOSQL数据库之MongoDB

    一.NoSQL概述 如今,大多数的计算机系统(包括服务器.PC.移动设备等)都会产生庞大的数据量.其实,早在2012年的时候,全世界每天产生的数据量就达到了2.5EB(艾字节,​).这些数据有很大一部 ...

  9. Windows下MongoDB环境搭建

    MongoDB下载 登录MongoDB官网:www.mongodb.org:点击[Download MongoDB]按钮,进入如下所示界面 选择目标操作系统及其版本,比如这里选择的是64位的Windo ...

随机推荐

  1. 神经网络模型及R代码实现

    神经网络基本原理 一.神经元模型 图中x1~xn是从其他神经元传来的输入信号,wij表示表示从神经元j到神经元i的连接权值,θ表示一个阈值 ( threshold ),或称为偏置( bias ).则神 ...

  2. 一款强大的Android网络渗透软件dsploit

    dSploit是一款基于Android系统的功能十分全面强大的网络渗透工具,可以提供给网络安全工作人员检查网络的安全性.小黑这次主要使用了其中的"简易嗅探""会话劫持&q ...

  3. 【译文】JNI编程

    原文链接: https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html   没有逐字翻译,解说了文章的大 ...

  4. 同步(Synchronous)和异步(Asynchronous)

    目录 概念性 图示例 举个例子 回到顶部 概念性 同步和异步通常用来形容一次方法调用. 同步方法调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为. 异步方法调用更像一个消息传递,一旦开始 ...

  5. MySQL自动化运维之用mysqldump和mysqlbinlog实现某一数据库的每周全备和每天差异备份,并添加到执行计划【热备】

    案例: 线上有一数据库,需要每周全备一次,每天差备一次[安全起见还是差备吧,不要增备,不要吝啬磁盘哦,而且差备恢复还很快] 1.每周对数据库hellodb做完全备份 crontab任务计划: * * ...

  6. java从基础知识(九)I/O

    java中的流可以从不同的角度进行分类 按流的方向:输入流.输出流(注意这里的输入(read).输出是相对于程序而言的(writer),个人认为从读.写角度理解更为直观) 按处理数据单位:字节流.字符 ...

  7. linux centos 6.5下安装nodejs

    1.将文件下载或拷贝至/usr/local/src目录下,可使用xshell工具上传文件 2.解压缩文件: tar xvf /usr/local/src/node-v6.9.2-linux-x64 3 ...

  8. js时间Date对象介绍及解决getTime转换为8点的问题

    前言 在做时间转换的时候,发现用“2016-04-12”转出来的时间戳是 2016-04-12 08:00的时间点,而不是0点. new Date('2016-04-12').getTime(); ) ...

  9. CSS 中关于background 属性功能

    background 是 css中的核心属性,我们对他应该充分了解. background-image   定义背景图像  这个属性是我们用的最多的属性 设置背景图像有两个方式 background: ...

  10. WebView-存在的内存泄漏

    0. Notice - earlier version 要使用WebView不造成内存泄漏,首先应该做的就是不能在xml中定义webview节点,而是在需要的时候动态生成.即:可以在使用WebView ...