1. 簡介
- MongoDB 是一個基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)。
- MongoDB 旨在為WEB應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案缚陷。
- MongoDB 將數(shù)據(jù)存儲為一個文檔抄谐,數(shù)據(jù)結(jié)構(gòu)由鍵值對組成导狡。文檔類似于JSON對象纹坐。
2. 安裝
MongoDB 官網(wǎng)下載安裝包:https://www.mongodb.com/download-center#community
設(shè)置數(shù)據(jù)存儲目錄
MongoDB 的將數(shù)據(jù)目錄存儲在db 目錄下,這個目錄需要手動創(chuàng)建痊夭。
需要創(chuàng)建在C盤的根目錄下刁岸。
在C盤根目錄創(chuàng)建data文件夾,在data文件夾下創(chuàng)建db目錄生兆。
將mongoDB與該目錄關(guān)聯(lián):在MongoDB安裝目錄下的bin目錄下運行命令行难捌,即打開命令行窗口,cd目錄到MongoDB安裝目錄下的bin目錄鸦难,然后運行下面的命令:
mongod.exe --dbpath c:\data\db
3. 名詞概念
- database : 數(shù)據(jù)庫
- collection: 集合(一個數(shù)據(jù)庫可以包含多個集合)
- document: 文檔(一個數(shù)據(jù)記錄行根吁,包含多個鍵值對)
4. 啟動數(shù)據(jù)庫服務(wù)
命令行切換到MongoDB安裝目錄下的bin目錄,運行命令:
mongod
5. 使用MongoDB后臺管理shell
在MongoDB安裝目錄下的bin目錄打開 git bash 窗口合蔽,運行以下命令:
./mongo
6. 操作
- 查看當(dāng)前數(shù)據(jù)庫
db
- 顯示所有數(shù)據(jù)庫名稱列表
show dbs
- 創(chuàng)建數(shù)據(jù)庫(如果不存在該數(shù)據(jù)庫則創(chuàng)建击敌,如果存在則切換到該數(shù)據(jù)庫)
use <database>
- 刪除數(shù)據(jù)庫(在切換到該數(shù)據(jù)庫的情況下運行以下命令)
db.dropDatabase()
- 連接數(shù)據(jù)庫
mongodb://host:port/<database>
- 在Nodejs中使用:
安裝MongoDB依賴包:
npm install mongodb
代碼中:
var MongoClient = require('mongodb').MongoClient;
//連接數(shù)據(jù)庫
MongoClient.connect('mongodb://localhost:27017/<yourDatabaseName>', function(err, database) {
if(err) {
throw err;
}
db = database;
})
之后db則代表了所連接的數(shù)據(jù)庫。
- 查找文檔
shell中://可以指定第二個參數(shù)返回指定的鍵
db.<collection>.find()//查找全部
db.<collection>.find().pretty()//pretty() 會以易讀有縮進的方式顯示查找結(jié)果
db.<collection>.find({"key":"value"}) //按照某個鍵值對來查找collection中的文檔
db.<collection>.find({"key":{$type:num}})//按照指定鍵的值的數(shù)據(jù)類型來查找拴事,不同的num代表不同的數(shù)據(jù)類型
Nodejs中:
//參數(shù)基本同上沃斤,toArray將查找結(jié)果轉(zhuǎn)化為數(shù)組圣蝎,result參數(shù)代表查找的結(jié)果數(shù)組
db.collection('collectionName').find().toArray(function(err,result)) {
//somecode here
- 插入文檔
shell中:
db.<collection>.insert({})
Nodejs中:
db.collection('collectionName').insert(data,function(err,record){
//data是插入的數(shù)據(jù)(json格式)
//record:插入操作成功返回的對象
- 刪除文檔
shell中:
db.<collection>.remove({})
Nodejs中:
db.collection('collectionName').remove({})
- 更新文檔
db.<collection>.update({"key":"value"},{$set:{"newKey":"newValue"}},boolean,boolean)
//第一個參數(shù)代表查詢條件
//第二個參數(shù)代表新的鍵值對;
//第三個參數(shù)代表如果不存在update的記錄,是否插入objNew,true為插入衡瓶,默認(rèn)是false徘公,不插入(可選,默認(rèn)false)哮针;
//第四個參數(shù)代表是否更新多條(可選关面,默認(rèn)false,只更新查找到的第一條)
第二個參數(shù)除了$set十厢,還可以是$inc(對鍵值為數(shù)字類型的值進行增減操作)等太,$push(對鍵值為數(shù)組類型的追加一個數(shù)組元素)等。
在Nodejs中第三第四個參數(shù)需寫成對象的形式:
db.collection('test').update(
{"key":"value"},
{$set:{"oneKey":"theValue"}},
{
upsert:true,
multi:true
}
- 文檔聚合
db.<collection>.aggregate([{$group:{ _id:"$key", num_total:{$sum:1}}}])
//對_id按照某個key的值聚合蛮放,按照sum(求和方式)缩抡,求和結(jié)果保存在num_total鍵
除了$sum 還可以是 $avg(求平均) $min(求最小值) $max(求最大值)