Nodejs和Mongodb的鏈接器Mongoose

簡介

今天咱們將學習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 —— 一種以文件形式存儲的數據庫模型骨架,沒法直接通往數據庫端,也就是說它不具有對數據庫的操做能力,僅僅只是數據庫模型在程序片斷中的一種表現,能夠說是數據屬性模型(傳統意義的表結構),又或着是「集合」的模型骨架。

那如何去定義一個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簡述

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簡述

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);  } 
 });


更多內容和練習請能夠看看我寫的免費內容:

http://www.hubwiz.com/class/543b2e7788dba02718b5a4bd

相關文章
相關標籤/搜索