MongoDB

2020-03-06  本文已影响0人  找呀找提莫

[toc]

1 NoSQL简介

1.1 优点缺点

1.2 分类

类型 部分代表 特点
列存储 Hbase
Cassandra
Hypertable
顾名思义,是按列存储数据的;最大的特点是方便存储结构化和半结构化数据,方便数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。
文档存储 MongoDB
CouchDB
文档存储一般用类似json的格式存储,存储内容是文档型的;这样也就有机会对某些字段简历索引,实现关系数据库的某些功能。
key-value存储 Tokyo Cabinet / Tyrant
Berkeley DB
MemcacheDB
Redis
可以通过key快速查询到其value,一般来说,存储不管value的格式,照单全收。<vr>(Redis包含了其他功能)
图存储 Neo4J
FlockDB
图形关系的最佳存储。
使用传统的图形关系数据库来解决图形存储的话,性能低下而且设计使用不方便。
对象存储 db4o
Versant
通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。
xml数据库 Berkekey DB XML
BaseX
搞笑的存储XML书记,并支持XML的内部查询语法,比如XQuery、Xpath。

2 MongoDB 部署

2.1 名词解释

SQL术语 MongoDB术语 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table join 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

2.2 安装MongoDB

tar -zxvf mongodb-linux-x86_64-3.6.5.tgz 

mv mongodb-linux-x86_64-3.6.5 /usr/local/
cd /usr/local/
ln -s mongodb-linux-x86_64-3.6.5 mongodb

2.3 配置MongoDB环境变量

vim /etc/profile
    MONGO_HOME=/usr/local/mongodb
    export PATH=$PATH:$MONGO_HOME/bin

source /etc/profile

2.4 创建数据目录

mkdir -p /mydata/mongodata

确保运行MongoDB的账户,对MongoDB的数据目录有读写权限

2.5 启动MongoDB

mongod --bind_ip_all --logpath /mydata/mongodata/mongod.log --fork --dbpath /mydata/mongodata/
    选项:
        --bind_ip_all   允许所有 ip 访问,默认是127.0.0.1
        --logpath       将 stdout 的内容输出到日志文件
        --fork          后台运行 MongoDB
        --dbpath        MongoDB 的数据布姆

2.6 关闭MongoDB

mongod --shutdown --dbpath /mydata/mongodata/

2.7 连接MongoDB

mongo 命令即可直接连接到本地的MongoDB

3 Mongo操作

3.1 基本命令

命令 作用
db 查看当前数据库名称
db.stats() 查看当前数据库信息

3.2 数据类型

数据类型 解释
Object ID 文档ID
String 字符串,最常用,必须是有效的UTF-8
Boolean 存储一个布尔值,true或false
Integer 整数可以是32位或64位,这取决于服务器
Double 存储浮点值
Arrays 数组或列表,多个值存储到一个键
Object 用于嵌入式的文档,即一个值为一个文档
Null 存储Null值
Timestamp 时间戳
Date 存储当前日期或时间的UNIX时间格式

3.2.1 object id

3.3 数据库操作

3.4 集合操作

例子:
        db.createCollection("sub", { capped : true, size : 10 } )

3.5 文档操作

3.5.1 插入

3.5.2 更新

例子:
    db.stu.update({name:'hr'},{name:'mnc'})<br>
    db.stu.update({},{$set:{gender:0}},{multi:true})

3.5.3 保存

例子:
    db.stu.save({_id:'20160102','name':'yk',gender:1})

3.5.4 删除

3.5.5 查询

查询的条件

例子:
    查询年龄大于或等于18的学生
        db.stu.find({age:{$gte:18}})
例子:
    查询年龄大于18或性别为0的学生,并且学生的姓名为gj
        db.stu.find({$or:[{age:{$gte:18}},{gender:1}],name:'gj'})
例子:
    查询年龄为18、28的学生
        db.stu.find({age:{$in:[18,28]}})
例子:
    查询姓黄的学生
        db.stu.find({name:/^黄/})
        db.stu.find({name:{$regex:'^黄'}}})
例子:
    查询年龄大于30的学生
        db.stu.find({$where:function(){return this.age>20}})

高级条件

1 limit 和 skip
2 投影
例子:
    db.stu.find({},{name:1,gender:1})
    db.stu.find({},{_id:0,name:1,gender:1})
3 排序
例子:
    根据性别降序,再根据年龄升序
        db.stu.find().sort({gender:-1,age:1})
4 统计个数
5 消除重复
例子:
    查找年龄大于18的性别(去重)
        db.stu.distinct('gender',{age:{$gt:18}})

4 高级操作

上一篇 下一篇

猜你喜欢

热点阅读