mongoDB看這篇就夠了

寫在前面的話

hello,小夥伴們,我是pubdreamcc,本篇文章依然出至於個人GitHub node學習教程,若是你以爲 pubdreamcc 寫的還能夠的話,但願給個star,謝謝各位的讚揚,大家點贊是我繼續更新的動力~javascript

node學習教程 githubhtml

mongoDB起步

  • 1.安裝mongoDB前端

    安裝這裏,我就不詳細介紹,你們能夠根據官網選擇匹配本身電腦系統的版本安裝便可。java

    mongoDB download地址: downloadnode

    下載下來以後,點擊打開直接下一步,下一步就 ok 了。git

  • 2.初體驗github

    1. 配置環境變量

    安裝完成後,會在安裝目錄下面生成一個 mongoDB 的文件夾,打開文件夾,進入 bin 文件夾中,把這裏的路徑配置成環境變量。sql

    1. 建立存儲數據庫文件 data

    在任意盤符根目錄下建立一個 data 目錄,用來存放數據庫文件。 mongoDB 會自動把本身安裝位置的盤符根目錄下的 data 文件夾做爲本身的數據存儲目錄,這裏也能夠直接在安裝位置所在盤符建立。mongodb

    1. 啓動 mongoDB 數據庫

    若是 data 目錄建立在安裝位置的盤符根目錄下,直接 打開命令行,敲入:shell

    mongod
    複製代碼

    若是是其餘位置,則須要指定數據存放的位置:

    mongod --dbpath 文件路徑
    複製代碼

    若是看到輸出: waiting for connections on port 27017 說明啓動數據庫成功。

    1. 鏈接數據庫

    再打開一個命令行,敲入 mongo ,則會默認鏈接到本地開啓的數據庫。好了,到這裏咱們就完成了如何開啓一個 mongoDB 數據庫了,接下來只需往數據庫裏存數據,操做數據便可。

MongoDB 概念解析

mongoDB 做爲一個 NoSQL 數據庫,對於咱們前端學習成本很是低,後期會結合node一塊兒使用。mongoDB 中存儲的都是 鍵值對(key - value),格式相似於 JSON ,操做起來也是很是爽,徹底不須要咱們有什麼 SQL 語言的基礎。

mongodb中有三個基本核心的概念:

  • 文檔

  • 集合

  • 數據庫

它們之間是逐層包含的關係,一個集合能夠包含多個文檔,一個數據庫能夠有多個集合,下面聽我逐一道來:

文檔 : 文檔是一個鍵值(key-value)對(即BSON),本質相似於json對象 的鍵值對。

{"name":"pubdreamcc", "age": 24}
複製代碼

集合:集合就是 MongoDB 文檔組,實質上就是包含多個對象的數組。

好比,咱們能夠將如下不一樣數據結構的文檔插入到集合中:

{"name":"pubdreamcc"}
{"name":"pubdreamcc1","name":"pubdreamcc2"}
{"name":"pubdreamcc3","name":"pubdreamcc4","num":5}
複製代碼

數據庫(dataBase)

這裏的數據庫概念同 關係型數據庫中的數據庫概念一致,數據庫能夠包含多個集合。

下面給出一張圖用來表示 mongoDB 中的一些概念同 SQL 概念 的 對比,輔助理解。

mongoDB基本操做

在剛纔咱們鏈接上本地數據庫以後,在這個命令行,咱們能夠進行不少 mongoDB 提供的增刪改查等的基本操做,且聽我一一道來。

  • 1.建立數據庫 : use 數據庫名稱

    若是數據庫不存在,則建立數據庫,不然切換到指定數據庫。

    MongoDB 中默認的數據庫爲 test,若是你沒有建立新的數據庫,集合將存放在 test 數據庫中。

  • 2.查看全部數據庫: show dbs

  • 3.刪除數據庫: db.dropDatabase(),你可使用 db 命令查看當前數據庫名。

  • 4.建立集合: db.createCollection(集合名稱)

  • 5.查看已有集合: show collections

  • 6.刪除集合:db.集合名稱.drop()

    若是成功刪除選定集合,則 drop() 方法返回 true,不然返回 false

  • 7.插入文檔:db.集合名稱.insert(document)。往指定集合插入文檔,文檔的數據結構和 JSON 基本同樣。

  • 8.更新文檔: update() 方法用於更新已存在的文檔,語法格式:

    db.collection.update(
         <query>,
         <update>,
         {
           upsert: <boolean>,
           multi: <boolean>,
           writeConcern: <document>
         }
       )
    複製代碼

    參數說明

    • query : update的查詢條件,相似sql update查詢內where後面的。

    • update : update的對象和一些更新的操做符(如,inc...)等,也能夠理解爲sql update查詢內set後面的。

    • upsert : 可選,這個參數的意思是,若是不存在update的記錄,是否插入objNew,true爲插入,默認是false,不插入。

    • multi : 可選,mongodb 默認是false,只更新找到的第一條記錄,若是這個參數爲true,就把按條件查出來多條記錄所有更新。

    • writeConcern :可選,拋出異常的級別。

  • 9.刪除文檔:

    db.collection.remove(
      <query>,
      <justOne>
    )
    複製代碼

    參數說明

    • query :(可選)刪除的文檔的條件。

    • justOne : (可選)若是設爲 true 或 1,則只刪除一個文檔,若是不設置該參數,或使用默認值 false,則刪除全部匹配條件的文檔。

    • writeConcern :(可選)拋出異常的級別。

  • 10.刪除集合全部數據:db.collection.remove({})

  • 11.查詢文檔:db.collection.find(query, projection)

    參數說明

    • query :可選,使用查詢操做符指定查詢條件。

    • projection :可選,使用投影操做符指定返回的鍵。查詢時返回文檔中全部鍵值, 只需省略該參數便可(默認省略)。

    PS:

    若是你須要以易讀的方式來讀取數據,可使用 `pretty()` 方法,語法格式以下:
    
     ```json
     db.col.find().pretty()
     ```
    複製代碼

    pretty() 方法以格式化的方式來顯示全部文檔。

  • 12.查詢一個文檔(匹配條件的第一個):db.collection.findOne()

Node操做mongoDB

  • 方法一:

    使用 mongoDB 官方提供的 node mongodb drivermongoDB ,這種方法是官方提供的,感興趣的同窗能夠去 npm 官網查找文檔,這裏推薦下面一種方法。

    mongoDB npm 文檔

  • 方法二:

    使用 mongoose

    Mongoose 是在 node.js 環境下對 mongodb 進行便捷操做的對象模型工具。

    官方 api 文檔

下面說明下 mongoose 的具體用法。

  1. 安裝 mongoose

    npm install mongoose
    複製代碼

    安裝完成後,打開mongodb。命令行敲入:mongod,便可打開 mongodb

  2. 利用mongoose鏈接mongodb

    新建一個js文件,引入mongoose,這裏能夠參照官網 寫的一個 hello world

    const mongoose = require('mongoose')
    // 鏈接數據庫
    mongoose.connect('mongodb://數據庫地址(包括端口號)/數據庫名稱', (err, ret) => {
      if (err) {
        console.log('鏈接失敗')
      } else {
        console.log('鏈接成功')
      }
    })
    複製代碼

    這樣,咱們就能夠鏈接上數據庫了,注意:若是沒有指定數據庫名稱,則默認鏈接 test 數據庫。

  3. 建立 Schema ,設計文檔結構

    Schema 究竟是個什麼東西呢,咱們在往數據庫插入數據以前是否是應該得稍微設計下文檔的結構,也就是關係數據庫中表的結構啥的,由於有必定的設計才使得數據的完整性,不會產生髒數據,Schema就是用來幹這個事情的,咱們看下官方的介紹:

    Schema 主要用於定義 MongoDB 中集合 Collection 裏文檔 document 的結構。mongoose 對錶結構的定義,每一個 Schema 會映射到mongodb中的一個 collectionSchema 不具有操做數據庫的能力。

    定義Schema很是簡單,指定字段名和類型便可,支持的類型包括如下8種:

    String      字符串
     Number      數字    
     Date        日期
     Buffer      二進制
     Boolean     布爾值
     Mixed       混合類型
     ObjectId    對象ID    
     Array       數組
    複製代碼

    經過mongoose.Schema來調用Schema,而後使用new方法來建立schema

    // 引入Schema
    const Schema = mongoose.Schema
    // 經過 new 建立一個Schema
    const userSchema = new Schema({
      // 這裏來設計文檔的結構,後面插入集合的每個文檔必須是如下指定的結構
      name: {
        type: String,
        required: true // 規定 name 是必須有的字段
      },
      password: {
        type: String,
        required: true
      },
      email: {
        type: String
      }
    })
    複製代碼

    經過以上的實例,咱們就建立了一個 userSchema 的架構,規定了每一個文檔中必須有 namepassword 字段,且類型爲 Stringemail 字段類型爲 String,有或沒有均可以。

  4. Schema 發佈爲 model (模型)

    簡單說就是model是由 Schema 生成的模型,能夠對數據庫的操做。model的每個實例(instance)就是一個文檔。

    把 Schema 發佈爲模型只需調用mongoose的 mongoose.model() 方法便可,mongoose.model() 接收兩個參數,第一個參數表示模型的名稱,第二個參數是 Schema,返回值爲模型構造函數。這裏必定得把第一個參數設置成和 mongoose.model() 的返回值相同,不然會出錯。最後獲得的集合名稱就爲模型名稱的小寫形式,若是模型名稱最後一個字符是字母,則變成複數形式,若是最後一個是數字,則不變,好比:模型名稱:User,獲得的集合名稱爲: users,模型名稱爲:User1, 獲得的集合名稱爲;user1

    // 把Schema 發佈爲模型
    const User = mongoose.model('User', userSchema)
    複製代碼
  5. 經過模型構造函數,能夠對數據庫進行一系列增刪改查的操做。

    好了,咱們通過以上的步驟,最後就能夠經過 User 模型構造函數操做數據庫了。

mongoose增刪改查mongoDB

增長數據

實例化一個模型構造函數就獲得一個具體文檔。

const user = new User({
  // 傳入具體的數據信息,必須和以前的Schema 配置的結構一致
  name: 'pubdreamcc',
  password: '123456',
  email: '333@pubdreamcc.com' // 無關緊要
})

// 經過save()方法持久化存儲數據

user.save((err, ret) => {
  if (err) {
    console.log('保存失敗')
  } else {
    console.log('保存成功')
    console.log(ret) // ret 就是剛新增長的文檔
  }
})
複製代碼

ok, 經過上面兩步咱們就已經保存了一條數據到數據庫中了,就是怎麼簡單。

查詢數據

查詢數據這裏有好幾個 API , 能夠看下 mongoose 的官網:

  • find()
  • findById()
  • findOne()

具體的用法和以前在控制檯 操做mongoDB 數據相似,不清楚的同窗能夠查看本章第一節知識點: mongoDB數據庫的使用

這裏選取一個findOne表明

User.findOne({name: 'pubdreamcc'}, (err, ret) => {
  if (err) {
    console.log('查詢失敗')
  } else {
    console.log(ret) // ret 即爲查詢出來的那一條文檔
  }
})
複製代碼

findOne() 會查找匹配的第一個文檔出來,一般傳入一個查找條件(對象),這裏是從數據庫查找 namepubdreamcc 的文檔出來。

刪除數據

刪除數據一樣也有好幾個方法,這裏參照官網 api :

  • remove()
  • findOneAndRemove()
  • findByIdAndRemove()

用法其實和更新數據,包括前面說到的查找數據相似,remove() 會刪除全部匹配的所有文檔,findOneAndRemove() 會刪除匹配的第一個文檔,findByIdAndRemove() 經過惟一的id值刪除某一個文檔。

這裏選取findByIdAndRemove() 來講明,其餘的小夥伴能夠去 mongoose 官網 api 查詢,我就再也不反覆說了,用法很簡單,你們看一下都懂的。

mongoose 官網 api: api document

User.findByIdAndRemove('id值', (err, ret) => {
  if (err) {
    console.log('刪除失敗')
  } else {
    console.log('刪除成功')
    console.log(ret) // ret 即爲刪除信息反饋對象,包括成功刪了幾條數據等
  }
})
複製代碼

更新數據

更新數據也有幾個 api 能夠供咱們使用,我就羅列下,而後也是選取一個加以說明,其餘的小夥伴們能夠去官網查看 api 便可。

  • findByIdAndUpdate()
  • update()
  • findOneAndUpdate()

這裏選取 update() 來演示下:

User.update({name: 'pubdreamcc'}, {email: '111@pubdreamcc.com'}, (err, ret) => {
  if (err) {
    console.log('更新失敗')
  } else {
    console.log('更新成功')
  }
})
複製代碼

update() 方法會把全部知足條件的數據都更新,上面咱們已經把 name 爲: pubdreamcc 的全部文檔的email 都修改成 111@pubdreamcc.com

總結

本文也是我查閱了不少資料,包括相關教程得來,若是有的地方寫的有差錯,小夥伴們能夠留言評論。

好了,That's all. thank you!

相關文章
相關標籤/搜索