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环境搭建

时间: 2024-12-22 14:06:07

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

NoSql数据库初探-mongoDB读操作

MongoDB以文档的形式来存储数据,此结果类似于JSON键值对.文档类似于编程语言中将键和值关联起来的结构(比如:字典.Map.哈希表.关联数组).MongoDB文档是以BOSN文档的形式存在的.BSON是JSON附加了类型信息的一种二进制的表现形式. 文档中的字段可以是任何BSON类型,比如(文档类型.数组.文档数组) MongoDB将所有文档存储在collection中,collection是一组相关的文档集合,这一组文档集合拥有共同的索引,collection类似于关系型数据库中的表.

数据库概述及环境搭建

为什么使用数据库 动态数据网站中的数据都是存储在数据库中的 数据库可以用来持久存储客户端通过表单收集的用户信息 数据库软件本身可以对数据进行高效的管理 什么是数据库 数据库即存储数据的仓库,可以将数据进行有序的分门别类的存储.它是独立于语言之外的软件,可以通过API去操作它. 常见的数据库软件有:mysql.MongoDB.Oracle MongoDB数据库的下载与安装 下载网址:https://www.mongodb.com/download-center/enterprise 在下载并且安装

Windows下MongoDB环境搭建

MongoDB下载 登录MongoDB官网:www.mongodb.org:点击[Download MongoDB]按钮,进入如下所示界面 选择目标操作系统及其版本,比如这里选择的是64位的Windows Server 2008R2 下载.点击DOWNLOAD按钮,即可完成msi文件的下载. 安装 直接双击msi安装文件开始安装.安装完成后,在安装路径下能看到如下目录结构: 在这里能看到一些常用文件: mongo.exe 客户端程序 mongod.exe 服务端程序,通过运行该程序启动Mongo

Linux mongodb 环境搭建与初始配置

前言 MongoDB 是一个面向文档的通用型数据库,拥有 MySQL 等关系型数据库常用功能.除了能够创建.读取.更新和删除数据之外, 也还提供了一些拓展的功能,如索引.聚合.特殊的集合类型(如时间有限的集合).分片和集群,是一个易于使用.便于拓展的数据库. 也正因为它的这些特性,也是前端童鞋使用得比较多的一种数据库.蚂蚁金服的Basement Object 数据存储也是类似 MongoDB 的一种存储方式. 下面我们来看看如何在 Linux 系统(以 centos 系统为例)下快速地搭建起 M

NoSQL数据库一MongoDB基本使用

如今的网站对数据存储要求越来越灵活,在这种需求下 NoSQL 也就是非关系数据库越来越流行.所谓非关系数据库,是指不使用 SQL 语言进行数据操作的数据库的统称.这类数据库存储数据时没有固定的模式,不支持数据表 join 的操作,可以很方便的进行横向扩展.非关系数据库种类很多,其中 MongoDB 和 Redis 应用广泛. 一.MongoDB介绍 MongoDB 是一个是一个基于分布式文件存储的数据库,介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数

linux centos下mysql数据库的主从复制环境搭建

有两台MySQL数据库服务器Master和slave,Master为主服务器,slave为从服务器,初始状态时,Master和slave中的数据信息相同,当Master中的数据发生变化时,slave也跟着发生相应的变化,使得master和slave的数据信息同步,达到备份的目的. 原理图如下: 简单来说,mysql的主从复制的原理就是slave把master上面执行的 update,insert这些会使数据发生改变的sql语句从master上面同步过来,然后在自己的机器上再执行一遍,那么这两台数

每天一篇,学习业内领先的NoSQL数据库=》MongoDB

MongoDB简介: MongoDB是一款跨平台.面向文档的数据库,可以实现高性能.高可用性,并且能够轻松扩展. MongoDB也是一个介于非关系数据库和关系数据库之间的产品,是非关系型数据库中功能最丰富,最像关系型数据库的. 运行方式主要基于两个概念:集合与文档 MongoDB的特点: 1.安装简单,提供了面向文档存储功能 2.提供了复制.高可用性和自动分片功能 3.支持丰富的查询表达式,查询指令使用JSON形式的标记 4.支持各种编程语言:Ruby.Pathon.Java.C++.PHP.c

Django初探--开发环境搭建(笔记)

1. Django框架的安装 (1) 下载Django源码 Django-1.7.11.tar.gz,并解压,网址:https://www.djangoproject.com/download/ (2) 在Django源码目录下打开命令行,并运行:setup.py install,Django自动安装 在Ubuntu和Debian等发行版的linux中,可以使用apt程序来安装 apt-get install python-django 安装完成后,打开python UGI,输入以下代码,返回为

织梦lamp环境搭建

1.前言 CentOS(Community ENTerprise Operating System)是Linux发行版之一,它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成.CentOS是架构LAMP(Linux+Apache+PHP+MySQL)的理想操作系统,具 有较高的稳定性.本文以CentOS为例介绍linux系统下yum安装Apache+PHP+MySQL的方法. 2.准备工作 2.1.登录服务器 登录远程服务器,如果您的服务器在本地并