>[success] # MongoDB
* 传统型数据库
~~~
1.表与表直接的存在关系,需要通过sql语言操作,在操作数据库之前需要设
计表的结构,而且支持约束例如:唯一、主键、默认键、非空的约束
~~~
* MongoDB
~~~
1.非结构型数据库。没有行、列的概念。用JSON来存储数据。集合就相当于“表”,文档就相当于“行”。
2.结构数据库-》数据表(类似数组的集合)-》表记录(类似字典的文档对象)
3.MongoDB不用设计数据结构
4.其中传统中的表在里面叫法表示集合,每一行的数据信息叫文档
~~~
![](https://box.kancloud.cn/b22577b7c0984650cff245a82be42406_570x379.png)
>[danger] ##### 试用的场景
~~~
1、数据模型比较简单;
2、需要灵活性更强的IT系统;
3、对数据库性能要求较高;
4、不需要高度的数据一致性;
5、对于给定key,比较容易映射复杂值的环境。
~~~
>[danger] ##### 安装
<a href='https://www.mongodb.com/download-center?initial=true#community'>下载地址</a>
<a href="https://www.mongodb.org/dl/win32/x86_64-2008plus-ssl?_ga=2.167429814.904148266.1539497072-1693933222.1539497072">历史版本</a>
<a href="https://www.mongodb.org/dl/win32/i386">32位历史版本</a>
* 安装步骤下载后就一直点下一步,然后配置好环境变量
win7系统需要安装补丁,KB2731284。
![](https://box.kancloud.cn/efd665d018e0f26962cb6d12f1d68255_482x370.png)
* 输入mongod --version 测试是否安装成功
![](https://box.kancloud.cn/fcacf15ebec7ae6a97fbaf1f703dafc6_425x136.png)
>[success] # 使用
~~~
mongod 开机
mongo 使用数据库
mongoimport 导入数据
~~~
>[danger] ##### 启动指令 -- mongod
~~~
1.启动指令 mongod ,输入指令后会默认的在磁盘根目录 /data/db 创建数据
库,所以第一次时候需要在 磁盘根目录手动创建/data/db 文件目录
2.在cmd 设置储存目录 使用 mongod --dbpath 路径 例如mongod --dbpath c:\mongo
~~~
>[danger] ##### 启动后使用 -- mongo
~~~
1.输入mongod开始,mongodb的运行后,在打开一个cmd,输入mongo,开始使用mongodb数据库
~~~
>[danger] ##### 启动后离开数据库
~~~
1.输入exit
~~~
>[danger] ##### 列出所有数据库
~~~
1.show dbs
~~~
>[danger] ##### 创建及使用数据库
* 如果想新建数据库,也是use。use一个不存在的,就是新建。
~~~
1.use 数据库名字 例如use itcast
~~~
>[danger] ##### 删除当前数据库
~~~
1.db.dropDatabase();
~~~
>[danger] ##### 查看当前使用的数据库
~~~
1.db
~~~
>[danger] ##### 查看数据库中的表
* 表就是集合
~~~
show collections
~~~
>[danger] ##### 导入数据
~~~
mongoimport --db test --collection restaurants --drop --file primer-dataset.json
~~~
* 说明
~~~
-db test 想往哪个数据库里面导入
--collection restaurants 想往哪个集合中导入(也就是传统数据库中的表)
--drop 把集合清空
--file primer-dataset.json 哪个文件
~~~
>[danger] ##### 插入数据 -- insert
~~~
1.上面我们使用use 创建了一个itcast 的数据库,数据库中不能直接插入数
据,只能往集合(collections)中插入数据。不需要创建集合,只需要写点语法
2.插入数据,随着数据的插入,数据库创建成功了,集合也创建成功了
3.使用use 创建数据库后,如果没有创建集合,数据库是查询不到的
~~~
* 往 student集合中插入name 是小明的数据
~~~
db.student.insert({“name”:”xiaoming”});
~~~
>[danger] ##### 查找数据
* find() 查到集合中所有文档
~~~
db.student.find()
~~~
* find({ }) 精准匹配
~~~
db.student.find({"score.shuxue":70}); // 在score下嵌套了个字典所以跟普通编程语言类似点出对应对象
~~~
* find({ }) 查询多个条件
~~~
db.student.find({"score.shuxue":70 , "age":12})
~~~
* 查询大于条件$gt
~~~
db.student.find({"score.yuwen":{$gt:50}});
~~~
* 查询或or
~~~
db.student.find({$or:[{"age":9},{"age":11}]});
~~~
* 使用排序
~~~
db.restaurants.find().sort( { "borough": 1, "address.zipcode": 1 } )
~~~
>[danger] #### 更改
~~~
1.第一个是要更改数据的条件,第二个使用set是要更改的数据
~~~
* 查找名字叫做小明的,把年龄更改为16岁
~~~
db.student.update({"name":"小明"},{$set:{"age":16}});
~~~
* 更改所有数据条件
~~~
db.student.update({"sex":"男"},{$set:{"age":33}},{multi: true});
~~~
* 不加set 是吧整个数据全部替换
~~~
db.student.update({"name":"小明"},{"name":"大明","age":16});
~~~
>[danger] ##### 删除
~~~
db.表.remove( { "borough": "Manhattan" } )
~~~