您好,登錄后才能下訂單哦!
如今的網站對數據存儲要求越來越靈活,在這種需求下 NoSQL 也就是非關系數據庫越來越流行。所謂非關系數據庫,是指不使用 SQL 語言進行數據操作的數據庫的統稱。這類數據庫存儲數據時沒有固定的模式,不支持數據表 join 的操作,可以很方便的進行橫向擴展。非關系數據庫種類很多,其中 MongoDB 和 Redis 應用廣泛。
MongoDB 是一個是一個基于分布式文件存儲的數據庫,介于關系數據庫和非關系數據庫之間,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json的bson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。
MongoDB安裝很簡單,無需下載源文件,可以直接用apt-get命令進行安裝。
打開終端,輸入以下命令:sudo apt-get install mongodb
安裝完成后,在終端輸入以下命令查看MongoDB版本:mongo -version
輸出版本信息,表明安裝成功
啟動和關閉mongodb命令如下:
service mongodb start
service mongodb stop
默認設置MongoDB是隨Ubuntu啟動自動啟動的。
輸入以下命令查看是否啟動成功:pgrep mongo -l #注意:-l是英文字母l,不是阿拉伯數字1
卸載MongoDBsudo apt-get --purge remove mongodb mongodb-clients mongodb-server
shell命令模式
輸入mongo進入shell命令模式,默認連接的數據庫是test數據庫,在此之前一定要確保你已經啟動了MongoDB,否則會出現錯誤,啟動之后運行成功,如下截圖:
MongoDB 存儲的文檔記錄是一個 BSON 對象,類似于 JSON 對象,由鍵值對組成。比如一條用戶記錄:
{
name: "Aiden",
age: 30,
email: "luojin@simplecloud.cn"
}
每一個文檔都有一個 id 字段,該字段是主鍵,用于唯一的確定一條記錄。如果往 MongoDB 中插入數據時沒有指定 id 字段,那么會自動產生一個 id 字段,該字段的類型是 ObjectId,長度是 12 個字節。在 MongoDB 文檔的字段支持字符串,數字,時間戳等類型。一個文檔最大可以達到 16M, 可以存儲相當多的數據。
常用操作命令:
數據庫相關
先嘗試往 MongoDB 中插入一條數據:
$ mongo
> use shiyanlou
> db.user.insertOne({name: "Aiden", age: 30, email: "luojin@simplecloud.cn", addr: ["CD", "SH"]})
{
"acknowledged" : true,
"insertedId" : ObjectId("59a8034064e0acb13483d512")
}
> show databases;
admin 0.000GB
local 0.000GB
shiyanlou 0.000GB
> show collections;
user
可以看到,在插入數據前使用 use 指令,切換到了 shiyanlou 數據庫,盡管該數據庫暫時不存在,但當我們插入數據后,該數據庫就被自動創建了。show databases 和 show collection 分別顯示了當前存在的數據庫和當前數據庫的所有文檔集合。而且數據插入后,自動添加了 id 字段。插入多條數據,可以使用 db.collection.insertMany 方法:
> db.user.insertMany([
... {name: "lxttx", age: 28, email: "lxttx@simplecloud.cn", addr: ["BJ", "CD"]},
... {name: "jin", age: 31, email: "jin@simplecloud.cn", addr: ["GZ", "SZ"]},
... {name: "nan", age: 26, email: "nan@simplecloud.cn", addr: ["NJ", "AH"]}
... ])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("59a8034564e0acb13483d513"),
ObjectId("59a8034564e0acb13483d514"),
ObjectId("59a8034564e0acb13483d515")
]
}
添加的數據其結構是松散的,只要是bson格式均可,列屬性均不固定,根據添加的數據為準。先定義數據再插入,就可以一次性插入多條數據,運行完以上例子,庫自動創建,這也說明 MongoDB 不需要預先定義 collection ,在第一次插入數據后,collection 會自動的創建。
查詢數據可以使用 db.collection.find 方法,可以指定查詢過濾條件:
> db.user.find()
{ "_id" : ObjectId("59a8034064e0acb13483d512"), "name" : "Aiden", "age" : 30, "email" : "luojin@simplecloud.cn", "addr" : [ "CD", "SH" ] }
{ "_id" : ObjectId("59a8034564e0acb13483d513"), "name" : "lxttx", "age" : 28, "email" : "lxttx@simplecloud.cn", "addr" : [ "BJ", "CD" ] }
{ "_id" : ObjectId("59a8034564e0acb13483d514"), "name" : "jin", "age" : 31, "email" : "jin@simplecloud.cn", "addr" : [ "GZ", "SZ" ] }
{ "_id" : ObjectId("59a8034564e0acb13483d515"), "name" : "nan", "age" : 26, "email" : "nan@simplecloud.cn", "addr" : [ "NJ", "AH" ] }
> db.user.find({name: "jin"})
{ "_id" : ObjectId("59a8034564e0acb13483d514"), "name" : "jin", "age" : 31, "email" : "jin@simplecloud.cn", "addr" : [ "GZ", "SZ" ] }
> db.user.find({age: {$gt: 30}})
{ "_id" : ObjectId("59a8034564e0acb13483d514"), "name" : "jin", "age" : 31, "email" : "jin@simplecloud.cn", "addr" : [ "GZ", "SZ" ] }
> db.user.find({addr: "CD"})
{ "_id" : ObjectId("59a8034064e0acb13483d512"), "name" : "Aiden", "age" : 30, "email" : "luojin@simplecloud.cn", "addr" : [ "CD", "SH" ] }
{ "_id" : ObjectId("59a8034564e0acb13483d513"), "name" : "lxttx", "age" : 28, "email" : "lxttx@simplecloud.cn", "addr" : [ "BJ", "CD" ] }
上面例子中,我們先通過 db.user.find() 獲取到了之前插入的全部數據。接著使用不同的過濾條件進行了查詢,其中有一些查詢如 {age: {$gt: 30}} 表示查詢年齡大于 30 的用戶。還可以發現查詢數組中是否存在某一元素也非常方便,上面的例子中查詢出了所有地址含有 CD 用戶。
MongoDB 的查詢功能非常強大,可以組合各種查詢條件,更多的使用方法可以學習實驗樓的其他課程。更新數據主要通過 db.user.updateOne 或者 db.user.updateMany 方法,前者更新一條記錄,后者更新多條記錄:
> db.user.updateOne(
... {name: "Aiden"},
... {$set: {age: 29, addr: ["CD", "SH", "BJ"]}}
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.user.find({name: "Aiden"})
{ "_id" : ObjectId("59a8034064e0acb13483d512"), "name" : "Aiden", "age" : 29, "email" : "luojin@simplecloud.cn", "addr" : [ "CD", "SH", "BJ" ] }
可以看到成功的更新了一條記錄。刪除數據也非常簡單,可以通過 db.user.deleteMany 或db.user.deleteOne 方法:
> db.user.deleteMany({addr: "CD"})
{ "acknowledged" : true, "deletedCount" : 2 }
> db.user.find()
{ "_id" : ObjectId("59a8034564e0acb13483d514"), "user" : "jin", "age" : 31, "email" : "jin@simplecloud.cn", "addr" : [ "GZ", "SZ" ] }
{ "_id" : ObjectId("59a8034564e0acb13483d515"), "user" : "nan", "age" : 26, "email" : "nan@simplecloud.cn", "addr" : [ "NJ", "AH" ] }
上面的命令成功的刪除所有地址包含 "CD" 的用戶,共刪除了兩條記錄。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。