MongoDB是一個開源的文檔數據庫和領先的NoSQL(非關係型)數據庫。node
一個數據庫能夠包含若干集合,一個集合也就是一張表(就像一個數組),包含了不少文檔(也即數據記錄,就像一個個對象),每一個對象包含了不少字段(對象的鍵值對)。 數據的組織形式能夠簡單粗暴的理解成一個多維的對象數組,層級關係和對應的術語以下: database > collection > document/data records > field(value)mongodb
官網下載:www.mongodb.com/download-ce… 下載後將安裝目錄中mongo.exe所在路徑添加到系統環境變量,例如:D:\MongoDB\Server\4.2\bin 打開mongoDB軟件,打開cmd直接輸入mongo便可運行mongo.exe,會顯示當前版本,並鏈接到mongoDB(或者直接在mongo.exe所在文件夾用命令行輸入mongo.exe運行mongoDB)。 此時在命令行能夠直接對mongo進行建立、增刪改查操做,並能夠在mongoDB軟件中刷新後看到。數據庫
建立/切換數據庫:use dbName
默認會有一個test數據庫express
查看當前所在所在數據庫:db
數組
顯示全部數據庫:show dbs
剛建立的空數據庫是不會顯示的,當插入一條記錄後方可顯示服務器
刪除當前所在數據庫:db.dropDatabase()
若是當前沒有選擇數據庫,則默認刪除test數據庫app
建立collection:db.createCollection(name, options)
less
顯示全部collection:show collections
spa
刪除collection:db.COLLECTION_NAME.drop()
命令行
過濾某些key:db.COLLECTION_NAME.find({},{KEY:1})
KEY表示要過濾的字段,1表示返回的結果包含這個字段,0表示不包含
增長一個document(對象):db.COLLECTION_NAME.insert(document)
document能夠是一個對象,也能夠是一個數組(包含多個對象) 還可使用save方法,插入的對象不含_id時,save和insert都會自動添加一個_id;含_id時,save會替換已有的含相同_id的對象
查詢:db.COLLECTION_NAME.find()
find內的參數能夠是
更新:db.COLLECTION_NAME.update(SELECTION_CRITERIA, UPDATED_DATA)
例如:db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}})
還可添加第三個參數:,{multi:true}
替換:db.COLLECTION_NAME.save({_id:ObjectId(),NEW_DATA})
刪除:db.COLLECTION_NAME.remove(DELLETION_CRITTERIA)
刪除全部:db.mycol.remove({})
指定返回字段Projection:db.COLLECTION_NAME.find({},{KEY:1})
1表示顯示,0表示不顯示
限制返回結果的數量:db.COLLECTION_NAME.find().limit(NUMBER)
NUMBER表示最多返回的數量,不傳返回所有結果
跳過指定結果:.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
若是返回結果有N個,那麼跳過第NUMBER個,返回其餘的結果;NUMBER默認爲0
排序:db.COLLECTION_NAME.find().sort({KEY:1})
根據KEY字段排序,1爲升序,-1爲降序,默認升序
建立索引:db.COLLECTION_NAME.ensureIndex({KEY:1})
指定索引的字段KEY,以及升序1降序-1;字段能夠有多個
聚合操做:db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
用來同時處理多個documents 示例:
// 表示以by_user字段值來分組,每遇到一個相同的值,總數sum增長1
db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
// 返回結果:
{
"result" : [
{
"_id" : "tutorials point",
"num_tutorial" : 2
},
{
"_id" : "Neo4j",
"num_tutorial" : 1
}
],
"ok" : 1}
複製代碼
其餘聚合相關的表達式:
表達式 | 描述 | 用法示例 |
---|---|---|
$sum | 對指定字段的值求和 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) |
$avg | 對指定字段的值求平均值 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]) |
$min | 對指定字段的值求最小值 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]) |
$max | 對指定字段的值求最大值 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}]) |
Replication是mongoDB的一種數據備份策略:
Replication is the process of synchronizing data across multiple servers.
mongoDB將一份數據複製成幾份組成一個副本集,包含一個primary node和多個sedondary node,每一個節點的數據保持一致,客戶應用程序只對primary進行讀寫操做。
分片是mongoDB的一種橫向數據存儲拓展策略:
Sharding is the process of storing data records across multiple machines and it is MongoDB's approach to meeting the demands of data growth.
它由如下三部分組成,工做流程是:router(能夠理解爲mongoDB實例)做爲對客戶應用程序開放的接口,將用戶請求均勻分配到不一樣的分片; 一個分片就是一個獨立的副本集,用來存儲數據,一般一個分片集羣對應多個router來分流用戶發來的請求; 配置服務器用來存儲整個數據集羣到每一個分片的映射關係,用來指導router如何將用戶請求導向特定的分片。一個數據集羣包含三個配置服務器。
參考教程:www.tutorialspoint.com/mongodb/mon… MongoDB手冊:mongodb-documentation.readthedocs.io/en/latest/