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中
  1
  2
  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 }

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-12-06 08:55:34

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

28个MongoDB NoSQL数据库的面试问答

MongoDB是目前最好的面向文档的免费开源NoSQL数据库.如果你正准备参加MongoDB NoSQL数据库的技术面试,你最好看看下面的MongoDB NoSQL面试问答.这些MongoDB NoSQL面试问答涵盖了NoSQL数据库基本的概念,复制(Replication),分片(Sharding),事务和锁,跟踪分析工具(Profiler),Nuances和日志等特性.让我们看看下面的这些MongoDB NoSQL数据库的面试问答吧: 1. 你说的NoSQL数据库是什么意思?NoSQL与RD

ado-请问一下如果学习mongodb等NOSQL数据库还需要学习LINQ或者ADO吗????

问题描述 请问一下如果学习mongodb等NOSQL数据库还需要学习LINQ或者ADO吗???? 会C#最近想学习数据库.不过SQL太麻烦了.如果学习NOSQL的数据库还需要学习LINQ或者ADO吗?我搞不清他们之间的关系...+_+ 解决方案 首先看你的定位.作为专业开发者,应该本身不会对任何技术感到"麻烦".因为你从事实际的开发,面临的业务要比纯粹的技术麻烦许多,如果学习技术都麻烦,基本上你是不称职的. 其次,技多不压身.各种技术有各种技术应用的场合,单单就完成一个任务来说,可能并

Hadoop2.X/YARN环境搭建--CentOS7.0 JDK配置_数据库其它

Hadoop是Java写的,他无法使用Linux预安装的OpenJDK,因此安装hadoop前需要先安装JDK(1.6以上) 原材料:在Oracle官网下载的32位JDK: 说明: 1.CentOS 7.0系统现在只有64位的,但是,Hadoop一般支持32位的,在64位环境下有事会有Warning出现,避免真的有神马问题,选择i586的JDK(即32位的),当然,64位的CentOS 7 肯定是兼容32位JDK的,记住:64位系统肯定兼容32位的软件,32位系统不能兼容64位软件.64位只是说

Hadoop 2.x伪分布式环境搭建详细步骤_数据库其它

本文以图文结合的方式详细介绍了Hadoop 2.x伪分布式环境搭建的全过程,供大家参考,具体内容如下 1.修改hadoop-env.sh.yarn-env.sh.mapred-env.sh 方法:使用notepad++(beifeng用户)打开这三个文件 添加代码:export JAVA_HOME=/opt/modules/jdk1.7.0_67 2.修改core-site.xml.hdfs-site.xml.yarn-site.xml.mapred-site.xml配置文件 1)修改core-

NoSQL数据库mongodb推出全新一代产品mongodb 2.6

近日,nosql数据库mongodb推出了全新一代产品mongodb 2.6,该版本全面强化核心服务器,提供全新的自动化工具与重要的企业功能,宣称是mongodb问世5年来最大的一次版本发布,主要改善开发http://www.aliyun.com/zixun/aggregation/7187.html">人员管理操作,与大型企业更好地适用. 据悉,mongodb为一跨平台的文件导向开源数据库系统,是目前最受欢迎的非关系型数据库(nosql),从2009年推出迄今已创下700万的下载次数.m

NoSQL数据库MongoDB、Redis、Tokyo Tyrant的性能比较

准备对MongoDB, Redis以及Tokyo Tyrant的读写做一个简单的测试,为了进行相对公平的测试,需要了解他们背后的实现机制,下面是一些比较: 存储实现的比较: * 内存文件映像(Memory-File Mapping) Redis, MongoDB * 文件 + Cache Tokyo Tyrant * 内存: Redis, Tokyo Tyrant Key/Value索引形式: * B+ Tree : MongoDB, Tokyo Tyrant * Hash Table: Red

Go语言开发环境搭建与初探(Windows平台下)_Golang

Go语言开发环境的搭建(Windows) Windows下的Go语言开发安装包 官方下载地址: https://code.google.com/p/go/downloads/list 下载地址:http://www.jb51.net/softs/237132.html Go语言中文官网(有相关参考和文档) http://zh.golanger.com/ 方法/步骤 1.在Go语言的Google代码项目上下载Windows下的Go语言开发包(下载地址见工具).有zip压缩版和msi安装版两个按本下

虚拟化环境下的NoSQL数据库评测

虚拟化环境下的NoSQL数据库评测 段虎一  李刚 鲁汉榕  陈新 为高效存储和处理海量数据,需要在实施虚拟化的数据中心上部署NoSQL数据库系统.针对NoSQL数据库以开源为主.种类繁多而造成选型困难的问题,采用YCSB测试框架,对在Vmware产品构建的虚拟化平台上部署的两种NoSQL数据库系统性能进行了三组测试.实验结果反映了这两种NoSQL数据库在不同读写场景.不同数据负载以及不同集群大小下的性能差异,对数据中心的数据库选型工作有一定的参考价值. 虚拟化环境下的NoSQL数据库评测

NoSQL数据库技术公司MongoDB获1.5亿美元投资

MongoDB完成新一轮融资,获得1.5亿美元的投资.本轮融资吸引了T. Rowe Price Associates以及Altimeter Capital.Salesforce.com等新投资者的参与.英特尔资本.NEA.Red Hat和红杉资本等原有投资者也参与了本轮融资.该公司自2007年成立至今,一共已经拿到了2.31亿美元的投资. 该公司是NoSQL数据库技术领域最知名的公司之一.同时,该公司也面临着其它NoSQL数据库厂商.SQL巨头.内存数据库提供商,以及一批提供"数据库即服务&qu