Express Mongodb以及mongoose基礎
本篇文章我們學習一下Mongodb的基礎知識和基礎操作。
Mongodb是一種面向文件的資料庫,文件資料庫(也稱為文件型資料庫)是一種 NoSQL 資料庫,旨在將半結構化資料儲存為文件。文件資料庫通常以 JSON 或 XML 格式儲存資料。
與傳統關係資料庫不同的是,每個非關係 (NoSQL) 文件的架構是不同的,可讓開發人員、資料庫管理員和 IT 專業人員更加靈活地整理和儲存應用程式資料並減少可選值所需的儲存。
JSON 文件支援使開發人員能夠更輕鬆地序列化和載入包含相關屬性和資料的物件。
在MongoDB中的一條記錄就是一個文件,是一個數據結構,由欄位和值對組成。MongoDB文件與JSON物件類似。欄位的值有可能包括其它文件、陣列以及文件陣列。
我們可以通俗將Mongodb的文件理解為一個JSON物件,下面是一個文件示例:
那麼Mongodb資料庫的結構是什麼樣的呢?
Mongodb有文件和集合構成一個完整的資料庫。
1.文件
文件是Mongodb的核心概念,它是鍵值對的一個有序序列,其資料結構就是json格式。
文件中的值可以是多種不同的資料型別,並且文件的內部結構是可以巢狀的,文件本身也可以作為鍵的值,使用內嵌文件可以使資料組織方式更加貼近我們的實際場景。
比如我們要儲存一個人的資訊,Mongodb可能的文件如下:
{ 'name': 'zhangsan', 'age': 12, 'address':{ 'city':'xi`an', 'zipCode':'718000', 'state':'state name' }, 'tel':'12xxxxxxxx' }
如果我們使用關係型資料庫,那麼這個結構的文件會被拆分為兩張表,一張user,一張address,然後通過主外來鍵進行關聯,實現聯合查詢。總之一句話:當資料結構繁雜,但是資料記錄規則的時候,使用Mongodb型別的資料庫會更加方便。
2.集合
集合顧名思義就是多個物件,在Mongodb中就是多個文件組成。而多個集合組成資料庫。
集合就是一組文件,當然了,常規的做法是將同種型別的文件放在一個集合裡面。
關於Mongodb更多的知識我們就不再多說,這裡我們只瞭解其基本概念。只要是資料庫,就離不開增刪改查,這裡我們就來看下在express中怎麼使用mongoose來操作Mongodb完成這些基礎操作。
mongoose是在node環境中操作Mongodb資料庫的一種便捷封裝,一種物件模型工具。mongoose可以讓我們更加方便的使用Mongodb資料庫,mongoose將mongodb資料庫中的資料轉化為JavaScript物件,提供類似JavaScript的介面,資料格式類似json。
在開始之前,我們需要了解mongoose的幾個概念。
1.Scheme:一種以檔案形式儲存的資料庫模型框架,不具備操作資料庫的能力。
2.Model:這是由Scheme生成的模型,具備抽象的屬性和行為,可以直接操作資料庫。
3.Entity:由Model建立的實體,可以直接操作資料庫。
通俗講Scheme就是關係型資料庫中表結構的定義,只要我們使用mongoose,那麼一切都會從Scheme開始。
實際使用中,Model和Entity都可以直接操作資料庫,但是Model更具有操作性,所以我們只需要關注Model就足夠了。
接下來我們就通過具體的例子來說明怎麼使用mongoose。
首先,我們需要安裝mongoose:
yarn add mongoose
安裝成功後,我們就需要在我們的工程中引入mongoose,並且連線mongodb資料庫。
我們現在工程目錄下建立一個db資料夾用來存放和資料庫相關的東西,並在下面建立一個db.js來初始化連線mongodb資料庫。
連線mLab對應資料庫的地址可以在下面的內容處找到:
db.js
// 引入mongoose
var mongoose = require('mongoose')
// 定義資料庫路徑
const DB_URL = "mongodb://<資料庫使用者>:<資料庫密碼>@ds145574.mlab.com:45574/<資料庫名稱>"
// 連線資料庫
mongoose.connect(DB_URL)
// 獲取mongoose connection物件
var db = mongoose.connection
// 連線資料庫錯誤回撥
db.on('error', console.error.bind(console, 'connection error:'));
// 成功開啟資料庫回撥
db.once('open', function() {
console.log('資料庫連線成功');
});
module.exports = mongoose
為了方便,我們直接在app.js中引入db.js,使工程執行初就連線資料庫。
var mongoose = require('./db/db')
此時,我們重新執行程式,如果連線成功,那麼會在控制檯看到下面的輸出: