MongoDB 入門筆記
工作需要用到了 MongoDB,怕自己忘掉做一個速查筆記...內容總結自菜鳥教程
MongoDB 簡介
MongoDB 是由C++語言編寫的,是一個基於分散式文件存儲的開源資料庫系統。在高負載的情況下,添加更多的節點,可以保證伺服器性能。MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似於 JSON 對象。欄位值可以包含其他文檔,數組及文檔數組。
MongoDB 的安裝
我用的是 linux,因此可以用以下命令進行安裝:
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz
mv mongodb-linux-x86_64-3.0.6/ /usr/local/MongoDB #也可以不挪
export PATH=/usr/local/MongoDB/bin:$PATH #不挪的話把 /usr/那個路徑換到 MongoDB 的存儲路徑
mkdir -p /data/db # 創建默認資料庫文件夾
MongoDB 的使用
開啟 MongoDB 服務
cd /usr/local/mongodb/bin
./mongod #開啟服務,可以通過 --dbpath 來修改資料庫目錄
進入 MongoDB Shell
./mongo
它是一個JavaScript shell。你可以在裡面進行數據的增刪改查。
MongoDB 基礎概念
在mongodb中基本的概念是文檔、集合、資料庫,下面我們挨個介紹。
資料庫
一個mongodb中可以建立多個資料庫。MongoDB的默認資料庫為"db",該資料庫存儲在data目錄中。你可通過 show dbs
查看所有的資料庫列表。
文檔
文檔是一組鍵值(key-value)對(即BSON)。BSON是一種類json的一種二進位形式的存儲格式,簡稱Binary JSON。MongoDB 的文檔不需要設置相同的欄位,並且相同的欄位不需要相同的數據類型,這與關係型資料庫有很大的區別,也是 MongoDB 非常突出的特點。一個簡單的文檔,如:
{"site":"www.runoob.com", "name":"菜鳥教程"}
集合
集合就是 MongoDB 文檔組,類似於 RDBMS (關係資料庫管理系統:Relational Database Management System)中的表格。集合存在於資料庫中,集合沒有固定的結構,這意味著你在對集合可以插入不同格式和類型的數據,但通常情況下我們插入集合的數據都會有一定的關聯性。如:
MongoDB 的增刪改查
創建資料庫
通過 use 命令連接到指定資料庫,如 use runoob
。有意思的是如果資料庫不存在,則創建資料庫,否則切換到指定資料庫。在 MongoDB 中,集合只有在內容插入後才會創建! 就是說,創建集合(數據表)後要再插入一個文檔(記錄),集合才會真正創建。
刪除資料庫
運行 db.dropDatabase() 刪除當前資料庫
MongoDB 創建集合
MongoDB 中使用 createCollection() 方法來創建集合。語法格式為:
db.createCollection(name, options)
name 是要創建的集合名稱, options 是可選項,包含
- capped,布爾值,如果為 true,則創建固定集合。固定集合是指有著固定大小的集合,當達到最大值時,它會自動覆蓋最早的文檔。
- autoIndexId,布爾,如為 true,自動在 _id 欄位創建索引。默認為 false。
- size,數值,為固定集合指定一個最大值(以位元組計)。可以和 capped 搭配使用。
- max,數值,指定固定集合中包含文檔的最大數量。
在插入文檔時,MongoDB 首先檢查固定集合的 size 欄位,然後檢查 max 欄位。如:
db.createCollection("mycol", { capped : true, autoIndexId : true, size :
6142800, max : 10000 } )
刪除集合
MongoDB 中使用 drop() 方法來刪除集合。語法格式為:
db.collection.drop()
use mydb
db.createCollection("mycol")
db.mycol.drop()
插入文檔
MongoDB 使用 insert() 或 save() 方法向集合中插入文檔,語法如下:
db.COLLECTION_NAME.insert(document) # 老版用法
db.collection.insertOne() # 向指定集合中插入一條文檔數據
db.collection.insertMany()# 向指定集合中插入多條文檔數據
更新文檔
MongoDB 使用 update() 和 save() 方法來更新集合中的文檔。
update
update() 方法用於更新已存在的文檔。其中 upsert(果不存在update的記錄,是否插入objNew)、multi(默認是false,只更新找到的第一條記錄)、writeConcern(拋出異常的級別)是可選參數。
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)
save
save() 方法通過傳入的文檔來替換已有文檔。語法格式如下:
db.collection.save(
<document>,
{
writeConcern: <document>
}
)
刪除文檔
MongoDB deleteOne() 和 deleteMany() 函數是用來移除集合中的數據。語法格式為:
db.inventory.deleteOne({})
查詢文檔
MongoDB 查詢文檔使用 find() 方法。find() 方法以非結構化的方式來顯示所有文檔。語法格式為:
db.collection.find(query, projection)
條件操作符
查詢嘛,一定會用到大於小於這種,在MongoDB中條件操作符有:
(>) 大於 - $gt
(<) 小於 - $lt
(>=) 大於等於 - $gte
(<= ) 小於等於 - $lte
檢索匹配類型的數據 $type
比如你想查找 col 集合中 like 大於 100 的數據,那麼你可以使用
db.col.find({likes : {$gt : 100}})
完成查詢。
limit、skip、sort、 方法
這個和mysql 的功能很像。
- limit 就是控制從結果中讀取的記錄條數
- skip就是在結果中跳過多少個。
- sort() 方法對數據進行排序,使用 1 和 -1 來指定排序的方式,其中 1 為升序排列,而 -1 是用於降序排列。
db.COLLECTION_NAME.find().limit(NUMBER)
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
db.COLLECTION_NAME.find().sort({KEY:1})
MongoDB 聚合
MongoDB中聚合(aggregate)主要用於處理數據(諸如統計平均值,求和等),並返回計算後的數據結果。MongoDB中聚合的方法使用aggregate()。語法格式為:
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
其中這個 AGGREGATE_OPERATION 包含 $sum、$avg、$min、$max、$push、$addToSet、$first、$last等。
管道的概念
MongoDB的聚合管道將MongoDB文檔在一個管道處理完畢後將結果傳遞給下一個管道處理。管道操作是可以重複的。在 MongoDB 中,常用的操作如下:
- $project:修改輸入文檔的結構。可以用來重命名、增加或刪除域,也可以用於創建計算結果以及嵌套文檔。
- $match:用於過濾數據,只輸出符合條件的文檔。$match使用MongoDB的標準查詢操作。
- $limit:用來限制MongoDB聚合管道返回的文檔數。
- $skip:在聚合管道中跳過指定數量的文檔,並返回餘下的文檔。
- $unwind:將文檔中的某一個數組類型欄位拆分成多條,每條包含數組中的一個值。
- $group:將集合中的文檔分組,可用於統計結果。
- $sort:將輸入文檔排序後輸出。
- $geoNear:輸出接近某一地理位置的有序文檔。
舉個例子:
db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );
索引
MongoDB使用 createIndex() 方法來創建索引。語法格式為:
db.collection.createIndex(keys, options)
刪除索引用 db.col.dropIndexes()。
推薦閱讀: