MongoDB介绍及CRUD操做

MongoDB介绍

mongodb属于nosql数据库,是一个文档型数据库,nosql实际上是相对于sql数据库而言的。传统的sql数据库存在一系列的问题。好比:须要遵循ACID范式,数据量过大的时候性能降低,不太容易作扩展等问题。nosql则解决了这样的问题
nosql具备如下特色:mysql

  • 简单的数据模型
  • 元数据和数据分离
  • 弱一致性
  • 高吞吐量
  • 高水平扩展能力和低端硬件集群
    mongodb数据库自己就支持数据切片和分布式,很是易于扩展。并且mongodb的数据建模无需事先定义,适用于非强事务性的数据存储场景。

mongodb经常使用操做:

安装:

  • 经过yum安装
  • 经过rpm包安装
  • 经过编译安装
  • 直接解压二进制文件安装

安装软件类型

  • mongod:mongodb服务启动项
  • mongo:mongodb的shell接口
  • tools:各类数据管理工具

mongodb数据结构介绍

mongodb数据结构有以下几种:web

  • db:数据库,对应mysql的db
  • collection:文档集合,对应于mysql的table
  • document:文档,对应于mysql的记录。
    mongodb的document是json格式的数据字串。在往mongodb插入数据的时候不须要实现定义数据库范式,不一样document的字段个数也不须要一致。

经常使用命令

help()        #获取帮助信息
show dbs    #列出当前数据库
show collections    #列出指定库中数据表
show users        #列出用户
show profile    #列出当前数据库全部性能参数
show logs        #列出日志
show log()        #列出指定日志
db.stats()        #列出数据库状态
db.version()       #列出数据库版本
db.serverStatus()    #列出数据库所在服务器状态信息
db.getcollectionNames()    #列出当前库全部collection
db.collection.stats()        #列出当前collection的信息

CRUD操做

> use db_name        #切换和建立数据库,mongodb不须要手动建立数据库,执行此命令其实已经建立数据库了,可是此时show dbs不会显示,只有往db中插入数据才会显示

> db.students.find()    #列出全部document

> db.students.find({age:{$lt: 1}})    #列出age小于1的全部数据

> db.students.find({age:{$lt: 1}}).count()    #统计全部age小于1的数据个数

> db.students.find({age:{$lt:9}}).limit(3)    #仅显示3条age小于9的数据

> db.students.find({age:{$lt:9}}).skip(3)    #显示age小于9的数据,跳过前三条

> db.students.findOne({age:{$lt:9}})    #仅显示一条age小于9的数据

> db.students.find({age:{$in:[10,20]}})    #显示年龄在10到20中间的数据

> db.students.find({$or:[{name:'student15'},{age:10}]}) #查找name为student15或者age为10的用户

> db.students.find({$and:[{name:'student15'},{age:10}]}) #查找name为student15而且age为10的用户

> db.students.find({class:{$exists:true}})  查询存在class字段的文档

> db.studnets.update({name:"tom"},{$set:{age:21}}})    #修改tom的age为21

find操做支持以下高级用法:sql

  1. 比较操做
  • $gt:大于
  • $gte:大于等于
  • $lt:小于
  • $lte:小于等于
  • $ne:不等于
  • $in:在某个取值范围内
  • $nin:不在某取值范围内
  1. 组合条件查询
  • $or:或
  • $and:与
  • $not:非
  • $nor:异或,返回不符合指定条件的document
  1. 元素查询
  • $exists:返回存在某字段的数据
  • $mod:对指定字段进行取模操做
  • $type:返回指定字段类型为指定类型的文档,语法格式{field:{$type:<BSON type}};1 Double(双精度),2 String,3 Object(对象),Array,Binary data,Undefined,Boolean,Date,Null,Regular Expression,JavaScripy,TimeStampmongodb

    注意:每一种数据类型都有一种数字来表示此类型shell

update经常使用操做:数据库

  • $set:重置某字段值,语法格式({field:value},{$set:{field:new_value}})
  • $unset:删除某指定字段
  • $rename:对某字段重命名,语法格式({field:value},{$unset:{field1,field2,...}})
  • $inc:增长一个字段的值,实现自增加

删除经常使用操做:json

db.mycoll.remove(<query>,<justOne>)     justOne指定要删除的个数
db.mycoll.remove({age:21})  删除年龄为21的文档
db.mycoll.drop()    删除当前指定coll
db.dropDatabase()   删除库,须要先切换到库中

mongodb的索引

mongodb支持的索引类型:服务器

  • 单字段索引:构建一个字段的索引
  • 组合索引:构建多字段的索引
  • 多键索引:索引建立于子文档的索引
  • 空间索引:基于位置的索引
  • 文本索引:搜索整个文档的文本串
  • hash索引:只适用于精确查找,hash索引不论数据多少,查询速度都是一致的数据结构

    注意:按照范围查询使用的是树状索引并发

索引操做命令

db.students.ensureIndex({name:1})    #在name上建立升序索引,1表示升序索引,通常索引名即为字段名,能够经过name来额外指定索引名
db.students.getIndexes()    #获取在students上的全部索引
db.students.dropIndexes()    #删除全部索引
db.students.dropIndex(Index_name)    #删除指定名字索引
db.reIndex()    #重建索引
db.students.find(name:"student5000").explain()    #显示语句的执行过程

索引经常使用操做:

  • backgroup:true:表示在后台建立索引
  • unique:ture:表示在指定字段建立惟一键索引,不能插入重复值,不然会报错
  • dropDups:true:删除原有相同数据
  • sparse:true:建立稀疏索引

    注意:
    稀疏索引:多个字段取值共用一个索引项,好比1到5岁的人指向一个索引。索引体积小,可是可能须要作二次查找
    稠密索引:每个字段取值都有一个单独的索引项

mongodb经常使用服务器选项

经常使用服务器选项:

  • fork={true|false} mongod是否运行于后台
  • bind_ip=IP 启动以后监听地址
  • port=PORT 监听端口,默认27017,web端口28017
  • maxConns= 最大并发链接数,默认为1000000
  • logpath 日志位置,历史事件日志
  • syslog 由syslog管理日志
  • syslogFacility
  • logappend 是否使用日志滚动
  • keyFile 集群关系认证的私钥文件位置
  • setParameter
  • httpinterface 是否启用内置的web监控接口,默认28017
  • clusterAuthMode 集群认证
  • nounixsocket 是否监听于本地套接字
  • unixSocketPrefix 在哪一个路径建立套接字
  • auth={ture|faluse} 是否在数据库级别启用认证功能
  • repair 启动mongodb时先去修复database,进程意外终止致使数据没有同步时使用
  • journal 启用日志功能,保证数据一致性的日志,比较相似事务日志,单实例模型下必定要启用
  • journalCommitInterval 日志提交时间间隔,数据隔一段时间写入硬盘,把随机IO变成顺序IO
  • oplogSize oplog大小,默认为可用磁盘空间5%,最小1G
    调试相关选项:
  • cpu 周期性显示cpu和iowait的利用率信息
  • sysinfo 显示系统级别诊断相关信息
  • slowms 界定慢查询的时间,单位是毫秒
  • profile={0,1,2} 剖析系统问题,0关闭,1慢查询,2剖析全部操做
相关文章
相关标签/搜索