工作需要用到了 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()。


推薦閱讀:
相关文章