MongoDB 的安裝和基本操作

MongoDB 的安裝

使用 docker 安裝

下載鏡像:

  • docker pull mongo:4.4.8(推薦,下載指定版本)

  • docker pull mongo:latest (默認下載最新版本)

img

查看鏡像:

docker images

  • 可以看到 mongo 已經下載好了

img

啟動鏡像:

docker run -d –restart=always -p 27017:27017 –name mymongo -v /data/db:/data/db mongo:4.4.8

  • -d 後台運行
  • –restart=always docker 容器啟動 mongo 也啟動 關閉也是如此
  • -name 指定容器的名稱
  • -v 和磁盤的的某個文件綁定起來

進入容器:

docker exec -it mymongo /bin/bash

進入到 mongo 的客戶端

mongo

img

MongoDB 概念解析

不管我們學習什麼數據庫都應該學習其中的基礎概念,在 mongodb 中基本的概念是文檔、集合、數據庫,下面我們詳細介紹,下表將幫助您更容易理解 Mongo 中的一些概念:

SQL 術語/概念 MongoDB 術語/概念 解釋/說明
database database 數據庫
table collection 數據庫表/集合
row document 數據記錄行/文檔
column field 數據字段/域
index index 索引
table joins 表連接,MongoDB 不支持
primary key primary key 主鍵,MongoDB 自動將_id 字段設置為主鍵

MongoDB 常用操作

(1)Help 查看命令提示

db.help();

(2)切換/創建數據庫

use test

如果數據庫不存在,則創建數據庫,否則切換到指定數據庫

(3) 查詢所有數據庫

show dbs;

(4)刪除當前使用數據庫

db.dropDatabase();

(5)查看當前使用的數據庫

db.getName();

(6)顯示當前 db 狀態

db.stats();

(7)當前 db 版本

db.version();

(8) 查看當前 db 的鏈接機器地址

db.getMongo();

常用指令

我們先創建一個數據庫

use test


1 INSERT(新增)

插入到 User 集合中

db.User.save({name:’zhangsan’,age:21,sex:true})

查詢 User 集合中的所有文檔

db.User.find()

img


2 Remove(刪除)

remove()用於刪除單個或全部文檔,刪除後的文檔無法恢復

  • 刪除所有:db.User.remove({})
  • 指定 id 刪除:db.User.remove(id)
  • 指定條件刪除:db.User.remove({‘name’:’zhangsan’})

3 UPDATE (修改)
  • 第一個 { } 是條件
  • 第二個大括號 是需要修改的內容

示例:db.User.update({name:”lucy”}, {$set:{age:100, sex:0}})

img

Update()有幾個參數需要注意。

db.collection.update(criteria, objNew, upsert, mult)

  • criteria:需要更新的條件表達式

  • objNew:更新表達式

  • upsert:如 FI 標記錄不存在,是否插入新文檔。

  • multi:是否更新多個文檔。


4 QUERY(查詢)

4.1 WHERE

在 mongo 中 我們該如何使用條件查詢呢?

語法 :db.User.find ({“filed”,值})
示例: db.User.find({name:”張三”})

轉換成 sql : select * form User where name = ‘張三’

img

4.2 FIELDS

在正常開發中,只需要查詢出一個集合中的某幾個字段即可?那麼這樣的業務我們該如何去實現呢?

  • 第一個{}表示 什麼條件去查詢 就是上面的 where
  • 第二個{}表示 需要查詢出的 field 值為 1

語法 :db.User.find ( { } , { “filed” , 值 })

示例:db.User.find( { name : “張三” } , { ‘name’ : 1 } )

轉換成 sql: select name from User where name = ‘張三’

img


5 SORT

在 MongoDB 中使用 sort() 方法對數據進行排序,sort() 方法可以通過參數指定排序的字段,並使用 1 和 -1 來指定排序的方式,其中 1 為升序排列,而 -1 是用於降序排列。

示例:db.User.find().sort({‘age’:1})

轉換的 SQL :select * from User order by age desc

img


6 截取

在 MongoDB 中使用 limit()方法來讀取指定數量的數據,skip()方法表示從第幾行開始讀取

示例: db.User.find().skip(1).limit(2)

對應的 SQL: select * from User skip 1 limit 2

集合中的所有數據:一共兩條

img

第一行開始讀取 讀取到第二行結束

img


7 in(包含)

示例: db.User.find({age:{$in:[21,26,32]}})

轉換的 SQL:select * from User where age in (21, 26, 32)


8 COUNT(統計行數)

示例: select count(*) from User where age >20

轉換的 SQL: db.User.find({age:{$gt:20}}).count()
img


9 OR ( 或者)

age 是 20 或者 30 都滿足條件 類似於 |

示例: select * from User where age = 21 or age = 30

轉換的 SQL: db.User.find({$or:[{age:21}, {age:30}]})

img

10 aggregate(聚合)

MongoDB中聚合(aggregate)主要用於處理數據(諸如統計平均值,求和等),並返回計算後的數據結果。有點類似sql語句中的 count(*)

插入測試數據

db.article.insert({title: ‘MongoDB Overview’,description: ‘MongoDB is no sql database’,by_user: ‘runoob.com’,url: ‘//www.runoob.com‘,tags: [‘mongodb’, ‘database’, ‘NoSQL’],likes: 100})

db.article.insert({title: ‘NoSQL Overview’,description: ‘No sql database is very fast’,by_user: ‘runoob.com’,url: ‘//www.runoob.com‘,tags: [‘mongodb’, ‘database’, ‘NoSQL’],likes: 10})

db.article.insert({title: ‘Neo4j Overview’,description: ‘Neo4j is no sql database’,by_user: ‘Neo4j’,url: ‘//www.neo4j.com‘,tags: [‘neo4j’, ‘database’, ‘NoSQL’],likes: 750})

常見的聚合表達式

表達式 描述 示例
$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”}}}])
11 索引

索引通常能夠極大的提高查詢的效率,如果沒有索引,MongoDB在讀取數據時必須掃描集合中每個文件並選取那些符合查詢條件的記錄。這種掃描全集合的查詢效率是非常低的,特別在處理大量的數據時,查詢可以要花費幾十秒甚至幾分鐘,這對網站的性能是非常致命的。索引是特殊的數據結構,索引存儲在一個易於遍歷讀取的數據集合中,索引是對數據庫表中一列或多列的值進行排序的一種結構。

db.User.createIndex({“name”:1})

語法中 **name****值為你要創建的索引字段,

1** 為指定按升序創建索引,如果你想按降序來創建索引指定為 -1 即可