MongoDB + Nodejs

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(求最大值)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市包颁,隨后出現(xiàn)的幾起案子瞻想,更是在濱河造成了極大的恐慌,老刑警劉巖徘六,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件内边,死亡現(xiàn)場離奇詭異,居然都是意外死亡待锈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門嘴高,熙熙樓的掌柜王于貴愁眉苦臉地迎上來竿音,“玉大人,你說我怎么就攤上這事拴驮〈核玻” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵套啤,是天一觀的道長宽气。 經(jīng)常有香客問我,道長潜沦,這世上最難降的妖魔是什么萄涯? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮唆鸡,結(jié)果婚禮上涝影,老公的妹妹穿的比我還像新娘。我一直安慰自己争占,他們只是感情好燃逻,可當(dāng)我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布序目。 她就那樣靜靜地躺著,像睡著了一般伯襟。 火紅的嫁衣襯著肌膚如雪猿涨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天姆怪,我揣著相機與錄音叛赚,去河邊找鬼。 笑死片效,一個胖子當(dāng)著我的面吹牛红伦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播淀衣,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼昙读,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了膨桥?” 一聲冷哼從身側(cè)響起蛮浑,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎只嚣,沒想到半個月后沮稚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡册舞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年蕴掏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片调鲸。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡盛杰,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出藐石,到底是詐尸還是另有隱情即供,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布于微,位于F島的核電站逗嫡,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏株依。R本人自食惡果不足惜驱证,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望勺三。 院中可真熱鬧雷滚,春花似錦、人聲如沸吗坚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至车份,卻和暖如春谋减,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扫沼。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工出爹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缎除。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓严就,卻偏偏與公主長得像,于是被迫代替她去往敵國和親器罐。 傳聞我的和親對象是個殘疾皇子梢为,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容