>[success] # MongoDB
* 傳統型數據庫
~~~
1.表與表直接的存在關系,需要通過sql語言操作,在操作數據庫之前需要設
計表的結構,而且支持約束例如:唯一、主鍵、默認鍵、非空的約束
~~~
* MongoDB
~~~
1.非結構型數據庫。沒有行、列的概念。用JSON來存儲數據。集合就相當于“表”,文檔就相當于“行”。
2.結構數據庫-》數據表(類似數組的集合)-》表記錄(類似字典的文檔對象)
3.MongoDB不用設計數據結構
4.其中傳統中的表在里面叫法表示集合,每一行的數據信息叫文檔
~~~

>[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。

* 輸入mongod --version 測試是否安裝成功

>[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" } )
~~~