【mongodb】——mongodb總結

一、前言

     mongodb是目前比較流行的一個基於分佈式文件存儲的數據庫,它是一個介於關係數據庫和非關係數據庫(NoSQL)之間的產品,是非關係數據庫當中功能最豐富,最像關係數據庫的。mongoDB中將一條數據存儲爲一個文檔(document),數據結構由鍵值(key-value)對組成。 其中文檔類似於我們平常編程中用到的JSON對象。 文檔中的字段值可以包含其他文檔,數組及文檔數組。mongoDB中相關概念與我們熟悉的SQL概念對比如下:

MongoDB術語/概念 說明 對比SQL術語/概念
database 數據庫 database
collection 集合 table
document 文檔 row
field 字段 column
index index 索引
primary key 主鍵 MongoDB自動將_id字段設置爲主鍵 primary key

 

二、數據庫常用命令

show dbs;:查看數據庫

> show dbs;
admin   0.000GB
config  0.000GB
local   0.000GB
test    0.000GB

use q1mi;:切換到指定數據庫,如果不存在該數據庫就創建。

> use q1mi;
switched to db q1mi

db;:顯示當前所在數據庫。

> db;
q1mi

db.dropDatabase():刪除當前數據庫

> db.dropDatabase();
{ "ok" : 1 }

三、數據集常用命令

db.createCollection(name,options):創建數據集

  • name:數據集名稱
  • options:可選參數,指定內存大小和索引。
> db.createCollection("student");
{ "ok" : 1 }

show collections;:查看當前數據庫中所有集合。

> show collections;
student

db.student.drop():刪除指定數據集

> db.student.drop()
true

四、文檔常用命令

插入一條文檔:

> db.student.insertOne({name:"小王子",age:18});
{
	"acknowledged" : true,
	"insertedId" : ObjectId("5db149e904b33457f8c02509")
}

插入多條文檔:

> db.student.insertMany([
... {name:"張三",age:20},
... {name:"李四",age:25}
... ]);
{
	"acknowledged" : true,
	"insertedIds" : [
		ObjectId("5db14c4704b33457f8c0250a"),
		ObjectId("5db14c4704b33457f8c0250b")
	]
}

查詢所有文檔:

> db.student.find();
{ "_id" : ObjectId("5db149e904b33457f8c02509"), "name" : "小王子", "age" : 18 }
{ "_id" : ObjectId("5db14c4704b33457f8c0250a"), "name" : "張三", "age" : 20 }
{ "_id" : ObjectId("5db14c4704b33457f8c0250b"), "name" : "李四", "age" : 25 }

查詢age>20歲的文檔:

> db.student.find(
... {age:{$gt:20}}
... )
{ "_id" : ObjectId("5db14c4704b33457f8c0250b"), "name" : "李四", "age" : 25 }

更新文檔:

> db.student.update(
... {name:"小王子"},
... {name:"老王子",age:98}
... );
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.student.find()
{ "_id" : ObjectId("5db149e904b33457f8c02509"), "name" : "老王子", "age" : 98 }
{ "_id" : ObjectId("5db14c4704b33457f8c0250a"), "name" : "張三", "age" : 20 }
{ "_id" : ObjectId("5db14c4704b33457f8c0250b"), "name" : "李四", "age" : 25 }

刪除文檔:

> db.student.deleteOne({name:"李四"});
{ "acknowledged" : true, "deletedCount" : 1 }
> db.student.find()
{ "_id" : ObjectId("5db149e904b33457f8c02509"), "name" : "老王子", "age" : 98 }
{ "_id" : ObjectId("5db14c4704b33457f8c0250a"), "name" : "張三", "age" : 20 }

五、mongodb讀寫流程

        mongodb分片集羣是在副本集的基礎上弄出來的,意在解決水平擴展的問題。,下圖展現的就是一個高可用的mongodb分片集羣。整個集羣分爲四大部分,上層的客戶端(其實也可以是業務代碼)、Mongos(路由)、Mongod(作爲參數存儲的)、replica(副本集)。

  • 副(復)本集(replica set)中存儲的數據是相同的,爲的是容災。
  • 分片(Shard Server)爲了數據擴展,按照片鍵進行節點劃分,數據根據片鍵存儲到對應的服務器上。
  • Mongos是路由。

1、向MongoDB寫入數據

寫數據時,先向配置中心註冊,配置中心會返回相對應的key值

2、從MongoDB讀取數據

 

六、mongodb集羣及高可用 

        這部分內容參見我的另一篇博客:數據庫高可用集羣構建模式之——mongodb篇

七、參考文章

參考文章1:https://www.cnblogs.com/nulige/p/7613721.html

參考文章2:https://cloud.tencent.com/developer/article/1481321

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章