天天看點

MongoDB教程

一、安裝

然後配置環境變量,找到bin目錄,複制路徑,path下面建立,然後copy目錄進去,确定即可

配置“環境變量”,目的是在指令行中直接使用,而不需要輸入很長的路徑進入安裝目錄下再進行使用了。

1、打開終端,輸入mongod,啟動MongoDB伺服器

2、出現錯誤,原因:C:\目錄下,沒有 data\db 檔案夾,解決方法:在c盤下,建立data檔案夾,在data下面再建立db檔案夾;因為MongoDB在Windows中預設的資料庫目錄是c:\data。如果在沒有該目錄的情況下,直接運作mongod,就會報錯誤

3、但是我們可以更改資料庫目錄

mongod --dbpath=D:\妙味課堂檔案夾\190122Nodejs開發部落格系統\db --port=27017

--dbpath是指定資料庫存放目錄

--port是指資料庫端口号

4、重新輸入mongod,啟動MongoDB伺服器,預設端口27017

5、成功啟動MongoDB伺服器後,再打開一個指令行視窗輸入mongo,連接配接資料庫,然後就可以進行資料庫的一些操作。

show dbs:檢視已經存在的資料庫

MongoDB教程

db.version() :檢視資料庫版本

show users:顯示使用者

use admin :進入admin資料庫,現在就可以使用這個庫了(如果沒有這個庫,就會自動建立這個庫),如果該建立的庫下面沒有資料,預設不顯示該庫

show collections:檢視該資料庫下所有的集合

db:檢視目前在哪個資料庫下,或者說目前正在使用哪個資料庫

二、MongoDB與關系型資料庫的差別

MongoDB教程

比如:mysql的表tables,MongoDB這裡叫集合collections,集合裡面的每一條資料叫做檔案(document)

mongoDB是非關系型資料庫,将資料存儲為一個文檔,資料結構由鍵值對組成。mongoDB文檔類似于JSON對象,字段值可以包含其他文檔、數組及文檔數組。

一個mongoDB可以建立多個資料庫

三、建立資料庫,插入資料,檢視資料

use user //建立資料庫

db.user.insert({ "name":"xiao" }) //增加一條資料

db.user.find() // 檢視所有的資料

db.user.findOne() // 顯示第一條資料

db.user.update({ "name":"xiao" },{"name":"kate","age":"18"}) //修改資料

db.user.remove({ "name":"xiao" }) //删除資料

四、用js檔案寫mongo指令

五、批量插入

在操作資料庫時要注意兩個能力:

第一個是快速存儲能力。

第二個是友善迅速查詢能力。

注意一次插入不要超過48M,插入.zip和大圖檔什麼的盡量用靜态存儲,MongoDB存儲靜态路徑就好,這也算是一個規則。

在工作中如果在循環插入和批量插入舉起不定,那就選批量插入吧,它會給我們更優的性能體驗。

九、在express裡面使用mongoDB

1、了解mongoose的屬性、模型

2、mongoose是mongoDB的一個對象模型工具,是基于node-mongodb-native開發的mongoDB的nodejs驅動,可以在異步的環境下執行。同時它也是針對mongoDB操作的一個對象模型庫,封裝了mongoDB對文檔的一些增删改查等常用方法,讓nodejs操作mongoDB資料庫變得更加容易。

如果要通過mongoose建立一個集合并對其進行增删改查,就需要用到Schema(資料屬性模型)、Model、Entity

3、Schema (屬性)

在Mongoose裡一切都是從Schema開始的,每一個Schema都會映射到MongoDB的一個collection上。Schema定義了collection裡documents的模闆(或者說是架構)。一種以檔案形式存儲的資料庫模型骨架,不具備資料庫的操作能力,僅僅隻是資料庫模型在程式片段中的一種表現,可以說是資料屬性模型(傳統意義的表結構),又或者是集合的模型骨架。基本屬性類型有字元串、日期型、數值型、布爾型、null、數組、内嵌文檔等。

4、model (模型)

為了使用定義好的Schema,我們需要把blogSchema轉換成我們可以使用的model(其實是把Schema編譯成model,是以對于Schema的一切定義都要在compile之前完成)。也就是說model才是我們可以進行操作的handle。

由Schema構造生成的模型,除了Schema定義的資料庫骨架以外,還具有資料庫操作的行為,類似于管理資料屬性、行為的類。

這樣我們就獲得了一個名為Blog的model了。生成model的同時MongoDB中對應的collection也被建立了,model的名字是Blog,而collection的名字被預設是model名字的複數也就是blogs(細心的小夥伴會發現不止變複數了,而且字母全部變小寫了,親測是這樣的)。【由Schema釋出生成的模型,具有抽象屬性和行為的資料庫操作對】

person:資料庫中的集合名稱,當我們對其添加資料時如果person已經存在,則會儲存到其目錄下,如果未存在,則會建立person集合,然後再儲存資料。有了model,也就有了操作資料的能力。建立一個Model模型,需要指定兩點:1,集合名稱;2,集合的Schema結構對象。滿足這兩點,就可以操作資料庫啦。

5、Schema和model的了解

不同于關系型資料庫,MongoDB作為文檔型資料庫,Scheme、model、collection、document是其中的四大元素。document是MongoDB裡的基本存儲機關,collection是衆多同類document的集合。Schema定義了一類document的模闆,讓這一類document在資料庫中有一個具體的構成、存儲模式。而Schema僅僅是定義了Document是什麼樣子的,至于生成document和對document進行各種操作(增删改查)則是通過相對應的model來進行的。

    需要說明的是MongoDB中實際上隻有collection和document,Schema和model不過是定義和生成前二者過程中的工具而已。

6、入門案例

7、mongoose基礎操作

①查詢:

查詢分為多種類型,如條件查詢、過濾查詢等。options省略或為null,則傳回所有屬性;options中把需要顯示的屬性設定為大于零的數則傳回該屬性,_id不指定預設傳回,設定_id為0則不傳回該屬性,其他字段不指定,預設不傳回

MPersonModel不需要new了,通過var PersonModel = db.model("person", PersonSchema);擷取之後可以馬上使用了。Schema對象需要new一下。

查詢就是傳回一個集合中文檔的子集,mongoose模型提供了find、findOne和findById方法用于文檔查詢

findOne查詢單條,當查詢到一個符合條件的資料時,就會停止繼續查詢并傳回查詢結果。

②儲存||增加

save是一個執行個體方法,使用時需要先 new Model() 來執行個體化

③資料更新

Model.update(查詢條件,更新對象,callback) 預設更新一條文檔,若想全部更新,需要加上{multi:true}

④資料删除

Model.remove(查詢條件,callback)

⑤Limit()

limit()方法接受一個數字參數,該參數指定從MongoDB中讀取的記錄條數。

隻顯示兩條記錄:db.student.find().limit(2).pretty() //顯示student集合中前兩條記錄

limit()中number值為空時代表全部查出

⑥skip()

skip()方法來跳過指定數量的資料,skip方法同樣接受一個數字參數作為跳過的記錄條數。

跳過前三條記錄:db.student.find().pretty().skip(3)

隻顯示第4條記錄:db.student.find().pretty().limit(1).skip(3) 或者 db.student.find().pretty().skip(3).limit(1)

⑦排序sort()

sort()方法可以通過參數指定排序的字段,并使用 1 和 -1 來指定排序的方式,其中 1 為升序排列,而-1是用于降序排列。

db.COLLECTION_NAME.find().sort({KEY:1})

将Student集合中的文檔按照年齡升序排列:db.student.find().sort({age:1})

【注意】skip()與limit()的前後順序沒有要求,不管怎麼放置他們執行的順序都是先sort()後skip()最後limit()

⑧count

計算資料庫總資料數目

⑨⑩⑪⑫

十、使用可視化圖形軟體robomongo:

MongoDB教程

繼續閱讀