今天咱們將學習Mongoose,什麼是Mongoose呢,它於MongoDB又是什麼關係呢,它能夠用來作什麼呢,介紹Mongoose以前,咱們先簡單瞭解一下MongoDB。node
MongoDB是一個開源的NoSQL數據庫,相比MySQL那樣的關係型數據庫,它更顯得輕巧、靈活,很是適合在數據規模很大、事務性不強的場合下使用。同時它也是一個對象數據庫,沒有表、行等概念,也沒有固定的模式和結構,全部的數據以文檔的形式存儲(文檔,就是一個關聯數組式的對象,它的內部由屬性組成,一個屬性對應的值多是一個數、字符串、日期、數組,甚至是一個嵌套的文檔。),數據格式就是JSON。mongodb
介紹了MongoDB,咱們下面就要認識Mongoose了。數據庫
1. Mongoose是什麼?npm
Mongoose是MongoDB的一個對象模型工具,是基於node-mongodb-native開發的MongoDB nodejs驅動,能夠在異步的環境下執行。同時它也是針對MongoDB操做的一個對象模型庫,封裝了MongoDB對文檔的的一些增刪改查等經常使用方法,讓NodeJS操做Mongodb數據庫變得更加靈活簡單。數組
2. Mongoose能作什麼?異步
Mongoose,由於封裝了對MongoDB對文檔操做的經常使用處理方法,讓NodeJS操做Mongodb數據庫變得easy、easy、So easy!mongoose
學習了上面的介紹,相信你已經對Mongoose有了初步的認識和了解,千里之行,始於足下,奔跑吧,少年!工具
前面咱們已經認識了Mongoose,也瞭解了MongoDB,回顧一下:MongoDB是一個對象數據庫,是用來存儲數據的;Mongoose是封裝了MongoDB操做的一個對象模型庫,是用來操做這些數據的。學習
好,下面咱們就來進行操做數據的第一步吧。ui
1. 安裝mongoose:
npm install mongoose
2. 引用mongoose:
var mongoose = require("mongoose");
3. 使用"mongoose"鏈接數據庫:
var db = mongoose.connect("mongodb://user:pass@localhost:port/database");
4. 執行下面代碼檢查默認數據庫test,是否能夠正常鏈接成功?
var mongoose = require("mongoose"); var db = mongoose.connect("mongodb://127.0.0.1:27017/test"); db.connection.on("error", function (error) { console.log("數據庫鏈接失敗:" + error); }); db.connection.on("open", function () { console.log("------數據庫鏈接成功!------"); });
經過上節內容的學習咱們已經打下了基礎,本節內容就開始對MongoDB數據庫進行具體操做。首先,咱們再次簡單介紹一下MongoDB數據庫。
MongoDB —— 是一個對象數據庫,沒有表、行等概念,也沒有固定的模式和結構,全部的數據以Document(如下簡稱文檔)的形式存儲(Document,就是一個關聯數組式的對象,它的內部由屬性組成,一個屬性對應的值多是一個數、字符串、日期、數組,甚至是一個嵌套的文檔。),後面咱們會學習如何建立文檔並插入內容。
在MongoDB中,多個Document能夠組成Collection(如下簡稱集合),多個集合又能夠組成數據庫。
咱們想要操做MongoDB數據,那就得先要具有上面所說的包含數據的「文檔」,文檔又是什麼意思呢,請看以下介紹。
文檔 —— 是MongoDB的核心概念,是鍵值對的一個有序集,在JavaScript裏文檔被表示成對象。同時它也是MongoDB中數據的基本單元,很是相似於關係型數據庫管理系統中的行,但更具表現力。
集合 —— 由一組文檔組成,若是將MongoDB中的一個文檔比喻成關係型數據庫中的一行,那麼一個集合就至關於一張表。
若是咱們要經過Mongoose去建立一個「集合」並對其進行增刪改查,該怎麼實現呢,到這裏咱們就要先了解Schema(數據屬性模型)、Model、Entity了。
好,下面就開始去深刻了解它們吧!
Schema —— 一種以文件形式存儲的數據庫模型骨架,沒法直接通往數據庫端,也就是說它不具有對數據庫的操做能力,僅僅只是數據庫模型在程序片斷中的一種表現,能夠說是數據屬性模型(傳統意義的表結構),又或着是「集合」的模型骨架。
那如何去定義一個Schema呢,請看示例:
var mongoose = require("mongoose"); var TestSchema = new mongoose.Schema({ name : { type:String },//屬性name,類型爲String age : { type:Number, default:0 },//屬性age,類型爲Number,默認爲0 time : { type:Date, default:Date.now }, email: { type:String,default:''} });
基本屬性類型有:字符串、日期型、數值型、布爾型(Boolean)、null、數組、內嵌文檔等。
Model —— 由Schema構造生成的模型,除了Schema定義的數據庫骨架之外,還具備數據庫操做的行爲,相似於管理數據庫屬性、行爲的類。
如何經過Schema來建立Model呢,以下示例:
var db = mongoose.connect("mongodb://127.0.0.1:27017/test"); // 建立Model var TestModel = db.model("test1", TestSchema);
test1:數據庫中的集合名稱,當咱們對其添加數據時若是test1已經存在,則會保存到其目錄下,若是未存在,則會建立test1集合,而後在保存數據。
擁有了Model,咱們也就擁有了操做數據庫的金鑰匙,在後面的內容中,咱們就會學習使用Model來進行增刪改查的具體操做,因此,必定要熟悉他的建立格式喲!
若是你想對某個集合有所做爲,那就交給Model模型來處理吧,建立一個Model模型,咱們須要指定:1.集合名稱,2.集合的Schema結構對象,知足這兩個條件,咱們就會擁有一個操做數據庫的金鑰匙。
Entity —— 由Model建立的實體,使用save方法保存數據,Model和Entity都有能影響數據庫的操做,但Model比Entity更具操做性。
使用Model建立Entity,以下示例:
var TestEntity = new TestModel({ name : "Lenka", age : 36, email: "lenka@qq.com" }); console.log(TestEntity.name); // Lenka console.log(TestEntity.age); // 36
建立成功以後,Schema屬性就變成了Model和Entity的公共屬性了。
基於前面的內容,接下來咱們就開始學習對數據的具體操做了,下面是關於一些基礎數據的定義,相信對於你來講已經不陌生了,請在仔細溫習一遍吧!
爲了方便後面內容的學習和提升您的學習效率,如下基礎數據均和後面內容緊密相連,因此必須按照如下結構方式來定義,請勿修改(默認數據庫爲test,集合爲test1)。
var mongoose = require("mongoose"); var db = mongoose.connect("mongodb://127.0.0.1:27017/test"); var TestSchema = new mongoose.Schema({ name : { type:String }, age : { type:Number, default:0 }, email: { type:String }, time : { type:Date, default:Date.now } }); var TestModel = db.model("test1", TestSchema ); var TestEntity = new TestModel({ name : "helloworld", age : 28, email: "helloworld@qq.com" }); TestEntity.save(function(error,doc){ if(error){ console.log("error :" + error); } else{ console.log(doc); } });
更多內容和練習請能夠看看我寫的免費內容: