目录
- 关系与非关系
- MongoDB简介
- 常用命令
一、关系型数据库
- 书与读者 多对多
- 书与作者 一对多
- 书对出版日期 一对一
- MySql, Orcale, SqlServer, Access...
- SQL (结构化查询语言)
- 存在哪些问题
- 存储在硬盘上读写慢
- 保持ACID(事务原则)难扩展
二 、非关系型数据库
非关系型数据库优点
- NoSql(Not Only SQL)
key : value
- CAP -> BASE(三者不能同时使用,但是可以两两组合或者只用一个)
- 一致 性(Consistency) (所有节点在同一时间具有相同的数据)
- 可用性(Availability) (保证每个请求不管成功或者失败都有响应)
- 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)
非关系型数据库缺点
- 没有标准化
- 有限的查询功能 (到目前为止)
二者的关系
三、MongoDB
- 非关系型数据库nosql
- 文档存储:类json格式
- 有机会对字段建立索引,实现关系数据库
下载与安装
- https://www.mongodb.com/download-center/community
-
安装完成后需要配置环境变量
四、MongoDB操作
配置数据库目录
- 运行MongoDB服务器
mongod -dbpath xxx
- 连接MongoDB
-
mongo
-
数据库增删改查
- 查看当前数据库
show dbs
- 切换数据库(如果没有会自动创建)
use demo1
- 往数据库中插入一-条数据
-
db.demo1.insert({"name": “小红”})
-切换数据库 use demo1
-
- 删除数据库(删除之前需要先切换到对应的数据库)
-
db.dropDatabase()
-
五、集合
什么是集合
- 集合相当于一张表
- 集合可以有多个文档
创建/查看/删除集合
- 创建集合
db.createCollection('collection1')
- 查看已经创建的集合
show collections
- 删除集合
-
db.collection1.drop()
-
插入和查看文档(即集合中的数据)
- 文档是mongodb中的基本单元
- 相当于表中的一条记录
- 以json格式显示
- 插入和查看文档
- 插入文档时,MongoDB自动创建集合
db.collectionDemo.insert({"name" : "hello"})
- 查看插入的内容
-
db.collectionDemo.find().pretty()
-
- 插入复杂文档
- 声明变量,插入文档
document=({
title: 'MongoDB',
by: 'Insane',
tags: ['mongodb', 'database', 'NoSQL'],
});
db.collectionDemo.insert(document)
-
find() 操作
修改和删除文档
- 修改格式
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
- upsert:如果不存在update的记录,是否插入,默认false
- multi:把按条件查出来多条记录全部更新,默认fasle
- writeConcern:抛出异常的级别。
update是替换,没有修改的字段会消失!
-
修改文档
db.col.update({title':'MongoDB'}, {title':"MongoDB123'})
-
修改多个文档
db.col.update({'name':hello'}, {$set:{'name':"hello123'}}, {multi:true})
- 如果不加
$set
就会全部替换
- 如果不加
-
删除多个文档
db.col.remove({ name :'hello123'})
-
删除一个文档
-
db.col.remove({'name':'hello'},1)
-
#######修改操作符
$inc
- 用法:
{$inc:{field:value}}
- 作用:对一个数字字段的某个
field
增加value
- 示例:将 name 为 xiaohong 的学生的 age 增加 5
db.students.update({name:' xiaohong' },{$inc:{age:5}})
-
$set
:更新的概念,与{multi:true}
结合可以实现多处更新
- 用法:
{$set:{field:value}}
- 作用:把文档中某个字段
field
的值设为value
- 示例:把xiaohong的 年龄设为10岁
db.students.update({name:' xiaohong' '}, {$set:{age:10}})
$unset
- 用法:
{$unset:{field:1}}
- 作用:删除某个字段
field
- 示例:将 chenzhou 的年龄字段删除
db.students.update({name:' 'chenzhou' },{$unset:{age:1}})
$push
- 用法:
{$push:{field:value}}
- 作用:把value追 加到field里。
注: field只 能是数组类型,如果field不存在,会自动插入一个数 组类型
- 示例:给chenzhou添加别名"michael"
db.students.update({name:' 'chenzhou" },{$push:{"ailas"."Michael"})
$rename
- 用法:
{$rename:{old_field_name:new_field_name}}
- 作用:对字段进行重命名
- 示例:把xiaohong记录的name字段重命名为name2
db.students.update({name:"xiaohong"},{$rename:{"name":" name2"})