zoukankan      html  css  js  c++  java
  • MongoDB介绍及CRUD操作

    MongoDB介绍

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

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

    mongodb常用操作:

    安装:

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

    安装软件类型

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

    mongodb数据结构介绍

    mongodb数据结构有如下几种:

    • 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操作支持如下高级用法:

    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,TimeStamp

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

    update常用操作:

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

    删除常用操作:

    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剖析所有操作
  • 相关阅读:
    人肉搜索利大于弊?
    上海美容美发连锁店疯狂扩展,大面值会员卡慎办
    jQuery简单入门
    把苦难装在心里《赢在中国》(20080527)
    赢在中国(080304)
    ASP.NET MVC Preview 2新特性
    Lucifer的一场暴强围英雄表演
    php pack、unpack、ord 函数使用方法(二进制流接口应用实例)
    PHP开发绝对不能违背的安全铁则(摘)
    MySQL数据类型:UNSIGNED注意事项
  • 原文地址:https://www.cnblogs.com/stacks/p/8822127.html
Copyright © 2011-2022 走看看