當前位置:
首頁 >
MongoDB菜鸟教程
發布時間:2023/12/20
62
豆豆
生活随笔
收集整理的這篇文章主要介紹了
MongoDB菜鸟教程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
創建數據庫
語法 MongoDB 創建數據庫的語法格式如下: use DATABASE_NAME 如果數據庫不存在,則創建數據庫,否則切換到制定數據庫。
查看所有數據庫可以用show dbs (ps:沒有數據的數據庫是不會顯示的)
MongoDB中默認的數據庫時test,如果沒有創建數據庫,集合將存放在test數據庫中。
刪除數據庫 語法 MongoDB刪除數據庫的語法格式如下: db.dropDatabase() 刪除當前數據庫,默認為test,你可以用db命令來查看當前數據庫。
插入文檔 文檔的數據結構和JSON基本一樣。 所有存儲在數據庫中的數據都是BSON格式。 BSON是一種類json的一種二進制形式的存儲格式,簡稱Bina
MongoDB 使用insert()或save()方法向集合中插入文檔,語法如下: db.COLLECTION_NAME.insert(document)
實例:以下文檔可以存儲在MongoDB的數據庫中的col集合中:
我們也可以將數據定義為一個變量,如下所示:
執行結果為:
執行插入操作:
插入文檔也可以用db.col.save(document)命令。如果不指定_id字段save()方法類似insert()方法。如果指定_id字段,則會更新該_id的數據。
更新文檔 MongoDB使用update()和save()方法來更新集合中的文檔。接下來讓我們詳細來看下兩個函數的應用及其區別。 update()方法 update()方法用于更新已存在的文檔,語法格式如下:
參數說明: query:update的查詢條件,類似sql update查詢內where后面的。 update:update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set后面的 upsert:可選,這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認為false,不插入。 multi:可選,mongodb默認是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查詢出來的所有記錄更新。 writeConcern:可選,拋出異常級別。
實例 我們通過update()方法來更新標題(title)
可以看到標題中(title)中的數據改變了,以上語句沒有設置multi所以只會更新一條,如有需要則需要設置為true。
save()方法 save()方法通過傳入的文檔來替換已有文檔。語法格式如下。 參數說明: document:文檔數據。 writeConcern:可選,拋出異常的級別。
實例 以下實例中我們替換了 _id為56064f89ade2f21f36b03136?的文檔數據
更多實例 只更新第一條記錄:
全部更新:
只添加第一條:
全部添加加進去
全部更新
只更新第一條記錄
刪除文檔 MongoDB?remove()函數是用來移除集合中的數據。 MongoDB數據更新可以用update()函數。在執行remove()函數前先執行find()命令來判斷執行的條件是否正確,這是一個比較好的習慣。 語法 remove()方法的基本語法格式如下所示:
如果MongoDB是2.6以后的版本,語法格式如下:
參數說明: query:(可選)刪除的文檔條件。 justOne:(可選)如果設置為true和1,則只刪除一個文檔。 writeConcern:(可選)拋出異常的級別。
實例
如果你只想刪除第一條找到的記錄可以設置justOne為1,如下所示:
如果你想刪除所有數據,可以使用以下方式:
查詢文檔 語法 MongoDB的查詢語法如下所示:
find()方法以非結構的方式來顯示所有文檔。 如果你需要以易讀的方式來讀取數據,可以使用pretty()方式,語法如下:
pretty()方法以格式化的方式來顯示所有文檔。
除了find()方法之外,還有一個findOne()方法,它只返回一個文檔。
MongoDB與RDBMS Where語句比較 如果你熟悉常規的SQL數據,通過下表可以更好的理解MongoDB的條件語句查詢:
MongoDB AND 條件 MongoDB的find()可以傳入多個鍵(key),每個鍵(key)以逗號隔開,及常規SQL的AND條件。 語法格式如下:
實例 以下實例通過by和title鍵來查詢菜鳥教程中MongoDB教程的數據
以上實例類似于WHERE語句:WHERE by='菜鳥教程' AND title='MongoDB教程'
MongoDB OR 條件 MongoDB OR 條件語句使用了關鍵字 $or,語法如下:
實例
AND和OR聯合使用 以下實例演示了AND和OR聯合使用,類似常規SQL語句為: where likes>50 AND (by = '菜鳥教程' or title = 'MongoDB 教程')
MongoDB條件操作符 描述 條件操作符用于比較兩個表達式并從mangoDB集合中獲取數據。 MongoDB中條件操作符有: (>)大于 - $gt (<)小于 - $lt (>=)大于等于 - $gte (<)小魚 - $lte
MongoDB$type操作符 描述 $type操作符是基于BSON類型來檢索集合中匹配的數據類型,并返回結果。 MongoDB可使用的類型如下:
實例 如果想獲取集合中title為String的數據,如下所示:
MongoDB Limit與Skip方法 如果需要在MongoDB中讀取指定數量的數據記錄,可以使用MongoDB的Limit方法,limit()方法接受一個數字參數,該參數 指定從MongoDB中讀取記錄的條數。 語法 limit()方法的基本語法如下
實例 查詢文檔中的兩條記錄
MongoDB Skip()方法 主要是用來指定跳過指定數量的數據 語法 skip()語法如下
實例 以下實例只會顯示第二條文檔數據
注:skip()方法默認參數為0。
MongoDB 排序
MongoDB sort()方法 在mangoDB中使用sort()方法對數據進行排序,sort()方法可以通過指定參數指定排序的字段,并使用1和-1來指定排序的方式, 其中1為升序,2位降序。
語法 sort()方法基本語法如下:
實例 以下文檔演示了集合中的數據按字段likes的降序排列
注:如果沒有指定排序,默認按照文檔的升序排列。
MongoDB索引
索引能大大提高查詢的速度,沒有索引的話,MongoDB需要查詢文檔數據中的每一個列,大大影響了性能, 對于大數據量的查詢來說是非常致命的,索引是特殊的數據結構,存儲在一個易于遍歷的數據集合中,索引 是對數據表中一列或多列的值進行排序的一種結構。
ensureIndex()方法 MongoDB使用ensureIndex()方法來創建索引。
語法 ensureIndex()方法基本語法格式如下:
語法中key值為你要創建索引字段,1為指定按升序創建索引,如果你想按降序來創建索引指定-1即可。
實例
ensureIndex()方法中你也可以設置使用多個字段創建索引(關系型數據庫中稱為復合索引)。
ensureIndex()接收可選參數,可選參數列表如下:
實例 在后臺創建索引:
通過在創建索引時加background的選項,讓創建工作后臺執行。
MongoDB聚合 MongoDB中聚合主要用于處理數據(統計,求和等),并返回計算后的數據結果。有點類似sql語句中的count(*)。
aggregate()方法 MongoDB中聚合的方法使用aggregate()。
語法 aggregate()方法的基本語法格式如下所示:
實例 計算每個作者所寫的文章數,使用aggregate()計算結果如下:
以上實例類似sql語句:select by_user,count(*) from mycol group by by_user
聚合表達式
? ??
ps:最近很久沒寫微博了,主要因為來到了上海工作,最近穩定下來趕緊補充了一遍最近學習的筆記。
語法 MongoDB 創建數據庫的語法格式如下: use DATABASE_NAME 如果數據庫不存在,則創建數據庫,否則切換到制定數據庫。
查看所有數據庫可以用show dbs (ps:沒有數據的數據庫是不會顯示的)
MongoDB中默認的數據庫時test,如果沒有創建數據庫,集合將存放在test數據庫中。
刪除數據庫 語法 MongoDB刪除數據庫的語法格式如下: db.dropDatabase() 刪除當前數據庫,默認為test,你可以用db命令來查看當前數據庫。
插入文檔 文檔的數據結構和JSON基本一樣。 所有存儲在數據庫中的數據都是BSON格式。 BSON是一種類json的一種二進制形式的存儲格式,簡稱Bina
MongoDB 使用insert()或save()方法向集合中插入文檔,語法如下: db.COLLECTION_NAME.insert(document)
實例:以下文檔可以存儲在MongoDB的數據庫中的col集合中:
我們也可以將數據定義為一個變量,如下所示:
執行結果為:
執行插入操作:
插入文檔也可以用db.col.save(document)命令。如果不指定_id字段save()方法類似insert()方法。如果指定_id字段,則會更新該_id的數據。
更新文檔 MongoDB使用update()和save()方法來更新集合中的文檔。接下來讓我們詳細來看下兩個函數的應用及其區別。 update()方法 update()方法用于更新已存在的文檔,語法格式如下:
參數說明: query:update的查詢條件,類似sql update查詢內where后面的。 update:update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內set后面的 upsert:可選,這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認為false,不插入。 multi:可選,mongodb默認是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查詢出來的所有記錄更新。 writeConcern:可選,拋出異常級別。
實例 我們通過update()方法來更新標題(title)
可以看到標題中(title)中的數據改變了,以上語句沒有設置multi所以只會更新一條,如有需要則需要設置為true。
save()方法 save()方法通過傳入的文檔來替換已有文檔。語法格式如下。 參數說明: document:文檔數據。 writeConcern:可選,拋出異常的級別。
實例 以下實例中我們替換了 _id為56064f89ade2f21f36b03136?的文檔數據
更多實例 只更新第一條記錄:
全部更新:
只添加第一條:
全部添加加進去
全部更新
只更新第一條記錄
刪除文檔 MongoDB?remove()函數是用來移除集合中的數據。 MongoDB數據更新可以用update()函數。在執行remove()函數前先執行find()命令來判斷執行的條件是否正確,這是一個比較好的習慣。 語法 remove()方法的基本語法格式如下所示:
如果MongoDB是2.6以后的版本,語法格式如下:
參數說明: query:(可選)刪除的文檔條件。 justOne:(可選)如果設置為true和1,則只刪除一個文檔。 writeConcern:(可選)拋出異常的級別。
實例
如果你只想刪除第一條找到的記錄可以設置justOne為1,如下所示:
如果你想刪除所有數據,可以使用以下方式:
查詢文檔 語法 MongoDB的查詢語法如下所示:
find()方法以非結構的方式來顯示所有文檔。 如果你需要以易讀的方式來讀取數據,可以使用pretty()方式,語法如下:
pretty()方法以格式化的方式來顯示所有文檔。
除了find()方法之外,還有一個findOne()方法,它只返回一個文檔。
MongoDB與RDBMS Where語句比較 如果你熟悉常規的SQL數據,通過下表可以更好的理解MongoDB的條件語句查詢:
MongoDB AND 條件 MongoDB的find()可以傳入多個鍵(key),每個鍵(key)以逗號隔開,及常規SQL的AND條件。 語法格式如下:
實例 以下實例通過by和title鍵來查詢菜鳥教程中MongoDB教程的數據
以上實例類似于WHERE語句:WHERE by='菜鳥教程' AND title='MongoDB教程'
MongoDB OR 條件 MongoDB OR 條件語句使用了關鍵字 $or,語法如下:
實例
AND和OR聯合使用 以下實例演示了AND和OR聯合使用,類似常規SQL語句為: where likes>50 AND (by = '菜鳥教程' or title = 'MongoDB 教程')
MongoDB條件操作符 描述 條件操作符用于比較兩個表達式并從mangoDB集合中獲取數據。 MongoDB中條件操作符有: (>)大于 - $gt (<)小于 - $lt (>=)大于等于 - $gte (<)小魚 - $lte
MongoDB$type操作符 描述 $type操作符是基于BSON類型來檢索集合中匹配的數據類型,并返回結果。 MongoDB可使用的類型如下:
| 類型 | 數字 | 備注 |
| Double | 1 | |
| String? | 2 | |
| Object | 3 | |
| Array | 4 | |
| Binary data | 5 | |
| Undefined | 6 | 已廢棄 |
| Object id | 7 | |
| Boolean | 8 | |
| Date | 9 | |
| Null | 10 | |
| Regular Expression | 11 | |
| JavaScript | 13 | |
| Symbol | 14 | |
| javaScript(with scope) | 15 | |
| 32-bit integer | 16 | |
| Timestamp | 17 | |
| 64-bit integer | 18 | |
| min key | 255 | Query with -1 |
| max key | 127 | |
實例 如果想獲取集合中title為String的數據,如下所示:
MongoDB Limit與Skip方法 如果需要在MongoDB中讀取指定數量的數據記錄,可以使用MongoDB的Limit方法,limit()方法接受一個數字參數,該參數 指定從MongoDB中讀取記錄的條數。 語法 limit()方法的基本語法如下
實例 查詢文檔中的兩條記錄
MongoDB Skip()方法 主要是用來指定跳過指定數量的數據 語法 skip()語法如下
實例 以下實例只會顯示第二條文檔數據
注:skip()方法默認參數為0。
MongoDB 排序
MongoDB sort()方法 在mangoDB中使用sort()方法對數據進行排序,sort()方法可以通過指定參數指定排序的字段,并使用1和-1來指定排序的方式, 其中1為升序,2位降序。
語法 sort()方法基本語法如下:
實例 以下文檔演示了集合中的數據按字段likes的降序排列
注:如果沒有指定排序,默認按照文檔的升序排列。
MongoDB索引
索引能大大提高查詢的速度,沒有索引的話,MongoDB需要查詢文檔數據中的每一個列,大大影響了性能, 對于大數據量的查詢來說是非常致命的,索引是特殊的數據結構,存儲在一個易于遍歷的數據集合中,索引 是對數據表中一列或多列的值進行排序的一種結構。
ensureIndex()方法 MongoDB使用ensureIndex()方法來創建索引。
語法 ensureIndex()方法基本語法格式如下:
語法中key值為你要創建索引字段,1為指定按升序創建索引,如果你想按降序來創建索引指定-1即可。
實例
ensureIndex()方法中你也可以設置使用多個字段創建索引(關系型數據庫中稱為復合索引)。
ensureIndex()接收可選參數,可選參數列表如下:
| Parameter | Type | Description |
| background | boolean | 建索引過程會阻塞其他數據庫操作,background可指定以后臺方式創建索引,即增加"background"可選參數。默認為false |
| unique | boolean | 建立的索引是否唯一。指定為true創建唯一索引。默認為false。 |
| name | string | 索引的名稱。如果為指定,MongoDB的通過連接索引的字段名和排序順序生成一個索引名稱。 |
| dropDups | boolean | 在建立唯一索引時是否刪除重復記錄,指定true創建唯一索引,默認值為false。 |
| sparse | boolean | 對文檔中不存在的字段數據不啟用索引,這個參數需要特別注意,如果設置為true的話,在索引字段中不會查詢出不包含對應字段的文檔。默認值為false。 |
| expireAfterSeconds | integer | 指定一個以秒為單位的數值,完成TTL設定,設定集合的生存時間。 |
| v | index version | 索引的版本號,默認的索引版本取決于mongod創建索引時運行的版本。 |
| weights | document | 索引權重值,數值在1到99,999之間,表示該索引相對其他索引字段的得分權重 |
| default_language | string | 對于文本索引,該參數決定了停用詞及詞干和詞器的規則的列表,默認為英語 |
| language_override | string | 對于文本索引,該參數指定了包含在文檔的字段名,語言覆蓋默認的language,默認值為language |
實例 在后臺創建索引:
通過在創建索引時加background的選項,讓創建工作后臺執行。
MongoDB聚合 MongoDB中聚合主要用于處理數據(統計,求和等),并返回計算后的數據結果。有點類似sql語句中的count(*)。
aggregate()方法 MongoDB中聚合的方法使用aggregate()。
語法 aggregate()方法的基本語法格式如下所示:
實例 計算每個作者所寫的文章數,使用aggregate()計算結果如下:
以上實例類似sql語句:select by_user,count(*) from mycol group by by_user
聚合表達式
| 表達式 | 描述 | 實例 |
| $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"}}}]) |
| $push | 在結果文檔中插入值到一個數組中 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}]) |
| $addToSet | 在結果文檔中插入值到一個數組中,但不創建副本。 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}]) |
| $first | 根據資源文檔的排序獲取第一個文檔數據 | db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}]) |
| $last | 根據資源文檔的排序獲取最后一個文檔數據 | db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}]) |
管道的概念
管道在Unix和Linux中一般用于將當前命令的輸出結果作為下一個命令的參數。
MongoDB的聚合管道將MongoDB文檔在一個管道處理完畢后將結果傳遞給下一個管道處理。管道操作是可以重復的。
表達式:處理輸入文檔并輸出。表達式是無狀態的,只能用于計算當前聚合管道的文檔,不能處理其它的文檔。
這里我們介紹一下聚合框架中常用的幾個操作:
- $project:修改輸入文檔的結構。可以用來重命名、增加或刪除域,也可以用于創建計算結果以及嵌套文檔。
- $match:用于過濾數據,只輸出符合條件的文檔。$match使用MongoDB的標準查詢操作。
- $limit:用來限制MongoDB聚合管道返回的文檔數。
- $skip:在聚合管道中跳過指定數量的文檔,并返回余下的文檔。
- $unwind:將文檔中的某一個數組類型字段拆分成多條,每條包含數組中的一個值。
- $group:將集合中的文檔分組,可用于統計結果。
- $sort:將輸入文檔排序后輸出。
- $geoNear:輸出接近某一地理位置的有序文檔。
管道操作符實例
1、$project實例
這樣的話結果中就只還有_id,tilte和author三個字段了,默認情況下_id字段是被包含的,如果要想不包含_id話可以這樣:
2.$match實例
$match用于獲取分數大于70小于或等于90記錄,然后將符合條件的記錄送到下一階段$group管道操作符進行處理。
3.$skip實例
ps:最近很久沒寫微博了,主要因為來到了上海工作,最近穩定下來趕緊補充了一遍最近學習的筆記。
總結
以上是生活随笔為你收集整理的MongoDB菜鸟教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Libvirt安装
- 下一篇: 酷Q自动升级失败的可能解决方法