`

01-MongoDB介绍及安装

    博客分类:
  • SQL
阅读更多

一、   MongoDB简介

MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。它在许多场景下可用于替代传统的关系型数据库或键/值存储方式。

    官网:http://www.mongodb.org/

    NoSql:全称是 Not Only Sql,指的是非关系型的数据库。下一代数据库主要解决几个要点:非关系型的、分布式的、开源的、水平可扩展的。原始的目的是为了大规模web应用,这场运动开始于2009年初,通常特性应用如:模式自由、支持简易复制、简单的API、最终的一致性(非ACID)、大容量数据等。NoSQL被我们用得最多的当数key-value存储,当然还有其他的文档型的、列存储、图型数据库、xml数据库等。

 

1、高性能、易部署、易使用,存储数据非常方便。主要功能特性有:

    •    面向集合存储,易存储对象类型的数据。

        模式自由。

        支持动态查询。

        支持完全索引,包含内部对象。

        支持查询。

        支持复制和故障恢复。

        使用高效的二进制数据存储,包括大型对象(如视频等)。

        自动处理碎片,以支持云计算层次的扩展性

        支持PythonPHPRubyJavaCC#JavascriptPerlC++语言的驱动程序,社区中也提供了对Erlang.NET等平台的驱动程序。

        文件存储格式为BSON(一种JSON的扩展)。

        可通过网络访问。

 

2、功能:

        面向集合的存储:适合存储对象及JSON形式的数据。

        动态查询Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。

        完整的索引支持:包括文档内嵌对象及数组。Mongo的查询优化器会分析查询表达式,并生成一个高效的查询计划。

        查询监视Mongo包含一个监视工具用于分析数据库操作的性能。·复制及自动故障转移:Mongo数据库支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目标是提供冗余及自动故障转移。

        高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)

        自动分片以支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器。

 

3、适用场合:

      网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。

      缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源 过载。

      大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。

      高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。Mongo的路线图中已经包含对MapReduce引擎的内置支持。

      用于对象及JSON数据的存储:MongoBSON数据格式非常适合文档化格式的存储及查询。

 

二、   下载安装和配置

1、安装

第一步:下载安装包:官方下载地址(http://www.mongodb.org/),如果是win系统,注意是64位还是32位版本的,请选择正确的版本。

第二步:新建目录“D:\MongoDB”,解压下载到的安装包,将bin文件夹拷贝到刚创建的目录下。

第三步:在“D:\MongoDB”目录下新建“data\db”文件夹,它将会作为数据存放的根文件夹。

 

2、启动Mongo服务端

 打开CMD窗口,按照如下方式输入命令:

  > d:

> cd D:\MongoDB\bin

> mongod --dbpath D:\MongoDB\data\db

 

   在浏览器输入:http://localhost:27017/,可以看到如下提示:You are trying to access MongoDB on the native driver port. For http diagnostic access, add 1000 to the port number

   如此,MongoDB数据库服务已经成功启动了。

 

3、MongoDB文件说明 

     其中有两个最重要的文件:Mongod.exe和Mongo.exe 。
       Mongod.exe 是用来连接到mongo数据库服务器的,即服务器端。
       Mongo.exe 是用来启动MongoDB shell的,即客户端。
     其他文件:
       mongodump 逻辑备份工具。
       mongorestore 逻辑恢复工具。
       mongoexport  数据导出工具。
       mongoimport  数据导入工具。

 

三、   MongoDB Shell

打开命令行窗口输入:mongo.exe命令,启动mongodb的命令窗口。

范例:创建一个新的数据库(mongodb里没有数据库):命令用来切换当前数据库,如果该数据库不存在,则会先新建一个

use mldndb

范例:设置一个users文档  在传统关系型数据库中,创建完了库后接下来会创建表,但是在mongoDB中没有“表”的概念,与其对应的一个概念是集合,即collection。

 这条命令是向users 集合中插入一条数据。如果集合users不存在,则会先新建一个,然后再插入数据,参数以JSON格式传入。

db.users.insert({userid:'mldn',name:'lixinghua',password:'hello'}) ;

db.users.insert({userid:'mldnjava',name:'mole',password:'nodejs'}) ;

 

> show dbs // 显示所有数据库
> show collections // 显示当前数据库下的所有集合
> db.users.find() // 显示users集合下的所有数据文档  

 

此时可以通过show tables查看所有的集合,已经发现存在了users集合。下面查询全部:

db.users.find();

    此处为了方便,所以所有的密码并没有采用加密的处理方式。

 

> db.users.update({'name':'xiangshu'},{'$set':{'sex':'women'}},upsert=true,multi=false)

 解释一下几个参数:第一:查询的条件,第二:更新的字段,第三:如果不存在则插入,第四:是否允许修改多条记录

删除'name'为'xumingxiang'的记录

> db. users.remove({'name':'xumingxiang'})

删除所有记录

 > db.users.remove()

删除collection

> db.users.drop() //如果删除成功会返回“true”,否则返回“false”

删除当前数据库

 > db.dropDatabase()

 

四、   Objectld

       官方wiki:http://docs.mongodb.org/manual/reference/object-id/

  当我们成功的插入一条文档到集合中后,我们会发现多了一个键"_id"和自动生成的ObjectId类型值。通常会在客户端由驱动程序完成。原因如下:

  • MongoDB的设计理念:能从服务器端转移到驱动程序来做的事,就尽量转移。扩展应用层也要比扩展数据库层容易得多。将事务交由客户端来处理,就减轻了数据库扩展的负担。
  • 在客户端生成Objectld,驱动程序能够提供更加丰富的API。

   集合中每个文档都有唯一的"_id"值,来确保集合里面每个文档都能被唯一标识。Objectld是"_id"的默认类型,它是一种轻量型的,不同的机 器都能用全局唯一的同种方法轻量的生成它。mongodb从开始设计就被定义为分布式数据库,处理多个节点是一个核心要求。若采用传统的自增主键策略,在 多台服务器上同步自动增加主键既费力又费时。

  

 

0 1 2 3 4 5 6 7 8 9 10 11
时间戳 机器名 PID 计数器

 

 

  

  

   

ObjectId 占用12字节的存储空间,每个字节两位十六进制数字,是一个24位的字符串。由“时间戳” 、“机器名”、“PID号”和“计数器”组成。使用机器名的好处是在分布式环境中能够避免单点计数的性能瓶颈。使用PID号的好处是支持同一机器内运行多 个mongod实例。最终采用时间戳和计数器的组合来保证唯一性。


  1.时间戳  4个字节。从标准纪元开始,单位为秒。

  • 时间戳,与随后的5个字节(机器名+PID)组合起来,提供了秒级别的唯一性。
  • 由于时间戳在前,这意味着Objectld大致会按照插入的顺序排列,这对于某些方面很有用,如将其作为索引提高效率,但是这个是没有保证的。
  • 这4个字节也隐含了文档创建的时间。绝大多数驱动都会公开一个方法从Objectld获取这个信息。

  2.机器名  3个字节。所在主机的唯一标识符。通常是机器主机名的散列值,机器名通过Md5加密后取前三个字节。

  3.PID  2个字节。为了确保在同一台机器上并发的多个进程产生的Objectld是唯一的,所以加上进程标识符(PID).注意到每次重启mongod进程后PID号通常会发生变化就可以了。   

  前9字节保证了同一秒钟不同机器不同进程产生的Objectld是唯一的。

  4.计数器  3个字节,表示的取值范围就是256*256*256=16777216。一个自动增加的计数器,确保相同进程同一秒产生的Obj ectld也是不一样的同一秒钟最多允许每个进程拥有2563 (16 777 216)不同的Objectld。

 

五、   更多命令

db.AddUser(username,password)  添加用户

db.auth(usrename,password)     设置数据库连接验证

db.cloneDataBase(fromhost)     从目标服务器克隆一个数据库
db.commandHelp(name)           returns the help for the command
db.copyDatabase(fromdb,todb,fromhost)  复制数据库fromdb---源数据库名称,todb---目标数据库名称,fromhost---源数据库服务器地址
db.createCollection(name,{size:3333,capped:333,max:88888})  创建一个数据集,相当于一个表
db.currentOp()                 取消当前库的当前操作
db.dropDataBase()              删除当前数据库
db.eval(func,args)             run code server-side
db.getCollection(cname)        取得一个数据集合,同用法:db['cname'] or
db.getCollenctionNames()       取得所有数据集合的名称列表
db.getLastError()              返回最后一个错误的提示消息
db.getLastErrorObj()           返回最后一个错误的对象
db.getMongo()                  取得当前服务器的连接对象get the server
db.getMondo().setSlaveOk()     allow this connection to read from then nonmaster membr of a replica pair
db.getName()                   返回当操作数据库的名称
db.getPrevError()              返回上一个错误对象
db.getProfilingLevel()         
db.getReplicationInfo()        获得重复的数据
db.getSisterDB(name)           get the db at the same server as this onew
db.killOp()                    停止(杀死)在当前库的当前操作
db.printCollectionStats()      返回当前库的数据集状态
db.printReplicationInfo()
db.printSlaveReplicationInfo()
db.printShardingStatus()       返回当前数据库是否为共享数据库
db.removeUser(username)        删除用户
db.repairDatabase()            修复当前数据库
db.resetError()                
db.runCommand(cmdObj)          run a database command. if cmdObj is a string, turns it into {cmdObj:1}
db.setProfilingLevel(level)    0=off,1=slow,2=all
db.shutdownServer()            关闭当前服务程序
db.version()                   返回当前程序的版本信息

 

db.test.find({id:10})          返回test数据集ID=10的数据集
db.test.find({id:10}).count()  返回test数据集ID=10的数据总数
db.test.find({id:10}).limit(2) 返回test数据集ID=10的数据集从第二条开始的数据集
db.test.find({id:10}).skip(8)  返回test数据集ID=10的数据集从0到第八条的数据集
db.test.find({id:10}).limit(2).skip(8)  返回test数据集ID=1=的数据集从第二条到第八条的数据
db.test.find({id:10}).sort()   返回test数据集ID=10的排序数据集
db.test.findOne([query])       返回符合条件的一条数据
db.test.getDB()                返回此数据集所属的数据库名称
db.test.getIndexes()           返回些数据集的索引信息
db.test.group({key:...,initial:...,reduce:...[,cond:...]})
db.test.mapReduce(mayFunction,reduceFunction,<optional params>)
db.test.remove(query)                      在数据集中删除一条数据
db.test.renameCollection(newName)          重命名些数据集名称
db.test.save(obj)                          往数据集中插入一条数据
db.test.stats()                            返回此数据集的状态
db.test.storageSize()                      返回此数据集的存储大小
db.test.totalIndexSize()                   返回此数据集的索引文件大小
db.test.totalSize()                        返回些数据集的总大小
db.test.update(query,object[,upsert_bool]) 在此数据集中更新一条数据
db.test.validate()                         验证此数据集
db.test.getShardVersion()                  返回数据集共享版本号

 


六、   MongoDB语法与现有关系型数据库SQL语法比较

MongoDB语法                                   MySql语法
db.test.find({'name':'foobar'}) <==> select * from test where name='foobar'
db.test.find()                  <==> select * from test
db.test.find({'ID':10}).count() <==> select count(*) from test where ID=10
db.test.find().skip(10).limit(20)     <==> select * from test limit 10,20
db.test.find({'ID':{$in:[25,35,45]}}) <==> select * from test where ID in (25,35,45)
db.test.find().sort({'ID':-1})        <==> select * from test order by ID desc
db.test.distinct('name',{'ID':{$lt:20}})  <==> select distinct(name) from test where ID<20
db.test.group({key:{'name':true},cond:{'name':'foo'},reduce:function(obj,prev){prev.msum+=obj.marks;},initial:{msum:0}})  <==> select name,sum(marks) from test group by name
db.test.find('this.ID<20',{name:1})  <==> select name from test where ID<20
db.test.insert({'name':'foobar','age':25})<==>insert into test ('name','age') values('foobar',25)
db.test.remove({})                <==> delete * from test
db.test.remove({'age':20})        <==> delete test where age=20
db.test.remove({'age':{$lt:20}})  <==> elete test where age<20
db.test.remove({'age':{$lte:20}}) <==> delete test where age<=20
db.test.remove({'age':{$gt:20}})  <==> delete test where age>20
db.test.remove({'age':{$gte:20}}) <==> delete test where age>=20
db.test.remove({'age':{$ne:20}})  <==> delete test where age!=20
db.test.update({'name':'foobar'},{$set:{'age':36}}) <==> update test set age=36 where name='foobar'
db.test.update({'name':'foobar'},{$inc:{'age':3}})  <==> update test set age=age+3 where name='foobar'

注意以上命令大小写敏感

 

七、   可视化的客户端管理工具MongoVUE

 

 

 

 

  • 大小: 65.3 KB
  • 大小: 107.9 KB
  • 大小: 45.4 KB
分享到:
评论

相关推荐

    真实可用的mongodb下周地址.txt

    01-mongodb文档型数据库特点介绍 01-NoSQL简介 02-mongodb安装过程 02-mongodb操作1 03-mongodb操作2 03-mongo库表操作语句 04-CURD操作详解 04-mongodb操作3 05-回顾 05-深入查询表达式 06-索引的使用 ...

    01mongodb介绍 安装 使用.zip

    mongo 数据库的介绍,安装,和使用视频教程。跟着视频操作就行

    MongoDB企业级分片集群搭建视频.zip

    1 MongoDB的简介和安装启动.mp4 2 MongoDB服务器的启动优化.mp4 3 MongoDB客户端基础使用.mp4 4 MongoDB集合的多种查询条件.mp4 5 MongoDB索引查询与建立.mp4 6 MongoDB数据库的监控命令.mp4 7 MongoDB副本集的搭建....

    openshift企业版管理开发详解视频.rar

    │ 01.openshfit-课程介绍.mp4,网盘文件永久连接 │ 02.openshift-allinone-install.mp4 │ 03.openshift-快速安装后的配置操作.mp4 │ 04.openshift-简单使用客户端创建应用.mp4 │ 05.openshift-组件及其关系介绍....

    mongodb3.2.8入门到精通视频教程.zip

    1.准备工作之下载centos,mongodb,GUI安装和介绍 2.Databases和Collections,Document概念分析 3.Capped Collections介绍及生产环境之疲劳度过滤,日志应用 4.Bson结构解析以及$type和_id原理详细分析 5.mongodb shell...

    RH-280OpenShift企业管理视频.zip

    12.安装配置broker基础消息服务-安装mongodb服务 13.安装配置broker-安装ActiveMQ服务 14.安装配置broker基础消息服务 15.安装broker主机 16.web console安装配置测试 17.安装node节点-安装环境介绍 18.安装node节点...

    老男孩Mysql高级DBA 实战新浪首席DBA 老男孩教育杨海朝老师全程主讲 老男孩Mysql视频.txt

    │ 1207-mongoDB和HBase简单介绍_rec.mp4 │ ├─L013-oldboy-mysql-dba-lesson13 │ 1301-MySQL日常问题处理总结_rec.mp4 │ 1302-如何成为一个好的MySQL DBA_rec.mp4 │ 1303-MySQL问题解答_rec.mp4 │ 1304-...

    新版 MySQL DBA 高级视频 基于MySQL 5.7 MySQL 8.0版本.rar

    │ 01redis介绍.mp4 │ 02es增删改查操作命令.mp4 │ 02ES的功能适用场景以及特点介绍.docx │ 02redis应用场景.mp4 │ 03ES的核心概念.docx │ 03redis单实例安装.mp4 │ 03集群分片副本操作.mp4 │ 04es集群运维....

    metalsmith-examples:我在#cfcamp 2015和#fullstackcon 2015的静态网站生成中的示例代码

    一些示例可能有特定要求(例如05-从MongoDB加载的页面)。 npm install node run 01 将01替换为您要执行的示例的目录名称。 这将启动Metalsmith构建过程,然后在端口8080上运行静态Web服务器。 ...

    新一代容器技术Docker视频.rar

    │ 19 19.Docker中安装MongoDB服务.mp4 │ 20 20.在docker中安装ElasticSearch以及Kibana服务.mp4 │ 21 21.Dcokerfile作用和执行流程说明.mp4 │ 22 22.Dockerfile中常用命令基本介绍.mp4 │ 23 23.Dockerfile中常...

    AIOT:https://www.accupass.comevent2010190951391182653038上的学习笔记和家庭作业

    AIOT物联网与感测装置介绍D01 AIOT人工智慧物联网介绍D02感测器介绍D03感测...介绍与安装实作基本的MonogoDB使用D09 Python访问MongoDB常用指令与程序教学pymongo增删改改查D10 RaspberryPi OS系统管理与操作开箱树梅派...

    ts typescript.txt

    01Typescript介绍 、Typescript安装、Typescript开发工具(15分51秒).rar 02 Typescript 中的数据类型 boolean 数字类型 number类型 string类型 array类型元组类型 (tuple)枚举类型 (enum) ...

    网络架构师148讲视频课程

    │ 第102节:MongoDB安装和基本使用.avi │ 第103节:MongoDB基本概念.avi │ 第104节:MongoDB增删改操作一.avi │ 第105节:MongoDB增删改操作二.avi │ 第106节:MongoDB查询操作一.avi │ 第107节:MongoDB查询...

Global site tag (gtag.js) - Google Analytics