国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

在Node中基于Mongoose對MongoDB進行增刪查改(CRUD)操作(一)

SillyMonkey / 2750人閱讀

摘要:如圖連接成功后,顯示你的數據庫,在這個節目可以對數據庫進行操作。如圖安裝與加載首先假定你已經安裝了,命令行工具輸入在使用的文件中即可。創建讀取更新刪除單值讀取上文是在中基于對進行增刪查改操作的簡單介紹,以后會有進階的文章。

關鍵詞:mongodb安裝 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查詢,增加,修改,刪除

工具介紹

MongoDB

MongoDB是基于Javascript語言的數據庫,存儲格式是JSON,而Node也是基于JavaScript的環境(庫),所以node和mongoDB的搭配能減少因為數據轉換帶來的時間空間開銷。

Mongoose

是MongoDB的一個對象模型工具,它將數據庫中的數據轉換為JavaScript對象以供你在應用中使用,封裝了MongoDB對文檔的的一些增刪改查等常用方法,讓NodeJS操作Mongodb數據庫變得更加靈活簡單。

Robomongo

一個可視化的mongoDB操作軟件,類似于mysql的navicat可視化工具。

捋一捋它們的關系,mongoDB是一個數據庫,mongoose是你在自己代碼中操作mongo數據庫的接口,而robomongo是mongo數據庫的可視化工具,通過它的界面方便直接操作數據庫內容。

工具安裝 MongoDB安裝

1.安裝mongoDB

到官網https://www.mongodb.com/download-center#community下載程序安裝,選擇custom模式就行。

2.建立MongoDB環境

需要自己建立db目錄作為數據庫環境,在命令行窗口中輸入

$ md datadb

建立db文件夾后,在命令窗口中進入安裝目錄的bin文件夾執行mongod.exe,把數據庫安裝在datadb中。mongoDB會檢測你的根目錄是否有datadb文件夾,如果有會默認安裝到這個文件夾里面。

 $ cd C:Program FilesMongoDBServer3.2in

 $ mongod.exe

當然也可以直接在系統根目錄下創建datadb文件夾,然后在mongoDB安裝文件夾中雙擊執行mongod.exe。

3.啟動MongoDB

命令行工具中輸入:

 $ cd C:Program FilesMongoDBServer3.2in

 $ mongod.exe

為了避免每次都要輸入目錄,所以在系統變量里面配置一下path變量,把";C:Program FilesMongoDBServer3.2bin"放到path后面(記得加;隔開),以后可以直接在命令行窗口輸入mongod.exe回車即可。

在瀏覽器中輸入網址:http://localhost:27017/ 。如果服務啟動成功會看到以下一段話:It looks like you are trying to access MongoDB over HTTP on the native driver port.

4.連接MongoDB(這一步基本沒有用,只有在命令行工具中使用mongo原生方法時需要,而在mongoose里面會有連接的代碼,Robomongo運行也會有連接)

命令行工具中輸入mongo.exe,回車。

如果出現這個警告:2016-07-16T14:49:02.827+0800 I CONTROL [main] Hotfix KB2731284 or later update is not installed, will zero-out data files那是因為Windows缺少一個補丁,從這個鏈接下周補丁451413_intl_x64_zip,然后解壓安裝包,在你解壓的目錄下找到Windows6.1-KB2731284-v3-x64.mus安裝文件。安裝重啟即可。

Robomongo安裝以及使用

直接到官網https://robomongo.org/下載安裝,安裝成功后運行,第一次運行,需要新創建一個連接,如圖創建test,點擊save保存連接。

選擇test,點擊connect連接數據庫。robomongo會自己搜索你系統里面安裝的mongodb并與其連接。如圖

連接成功后,顯示你的數據庫,在這個節目可以對數據庫進行操作。如圖:

Mongoose安裝與加載

首先假定你已經安裝了 Node.js,命令行工具輸入:

$ npm install mongoose -g

在使用的文件中require("mongoose");即可。

使用Mongoose進行CRUD操作 使用基本步驟

Mongose基于mongodb的原生方法,自己定義了一套操作MongoDB數據庫的接口,比原生方法更加簡單方便。為了更加直觀,下面的步驟結合例子來講。假如我需要做一個教務系統,需要存儲學生Student的信息,學生信息通常包含姓名name,學號id,電話phone,登錄日期date等。我把學生的信息存在mongodb的myDB數據庫中,集合的名字叫students。如圖:

_id這個域你可以自己定義,但如果你沒有定義,系統會自動給你加上。下面先介紹在node中通過mongoose對mongodb進行操作的必須前提步驟:

1.node連接數據庫

mongoose.connect("mongodb://user:pass@ip:port/database");

這只是最基本的連接,我們一般還會加一些設置,是否開啟調試模式,連接提示等。通常我會這么寫:

var mongoose = require("mongoose");
mongoose.Promise = global.Promise;

/*調試模式是mongoose提供的一個非常實用的功能,用于查看mongoose模塊對mongodb操作的日志,一般開發時會打開此功能,以便更好的了解和優化對mongodb的操作。*/
mongoose.set("debug", true);

/*一般默認沒有user和password*/
var db=mongoose.connect("mongodb://localhost/myDB");

db.connection.on("error", function (error) {  
  console.log("數據庫連接失敗:" + error); 
}); 

db.connection.on("open", function () {  
  console.log("數據庫連接成功"); 
});

沒有mongoose.Promise = global.Promise會出現如下錯誤(這個錯誤沒有什么影響):

意思是mongoose自帶的promise過期了,然后需要使用v8引擎的promise。

2.定義模式(Schema)

每個模式映射mongoDB的一個集合(注意映射這個詞,下面會講為什么),它定義(只是定義,不是實現)這個集合里面文檔的結構,就是定義這個文檔有什么字段,字段類型是什么,字段默認值是什么等。除了定義結構外,還定義文檔的實例方法,靜態模型方法,復合索引,中間件等。詳情自己查看mongoose官方文檔。

var mongoose = require("mongoose");
var Schema = mongoose.Schema;

/*定義模式Student_Schema*/
var Student_Schema = new Schema({
  name: String,
  id: Number,
  phone: String,
  date: Date
}, {
  versionKey: false
});

/*定義模型Student,注意數據庫存的是students*/
mongoose.model("Student", Student_Schema);

{versionKey: false}是干嘛用?如果不加這個設置,我們通過mongoose第一次創建某個集合時,它會給這個集合設定一個versionKey屬性值,這個屬性值包含這個文檔的內部版本,數據庫中顯示為_v,如圖:

通過{versionKey: false}可以配置這個參數,讓數據庫不再添加這個屬性,格式是:new Schema({..}, { versionKey: false });

3.定義模型(Model)

模型用來實現我們定義的模式,調用mongoose.model來編譯Schema得到Model。

/*定義模型Student,數據庫存的是students*/
mongoose.model("Student", Student_Schema);

為什么上面我強調模式的映射,那是因為模式僅僅是和db中集合文檔的結構相對應(映射),它并不直接在數據庫中操作這個結構,模型才是直接與數據庫打交道的存在,可以這么說:模式是定義結構,模型是實現操作。當我們使用mongoose.model("Student", Student_Schema)創建Student模型對數據進行操作時,數據庫會尋找一個名字叫students集合接受Student模型的操作,特別需要注意的是:1.如果是增加(instance.save)操作時,數據庫中沒有這個集合,數據庫會自動創建這個集合存儲數據,這個集合產生規則為:把Model名字字母全部變小寫和在后面加復數s。2.如果是刪改查三個操作數據庫中沒有這個集合,那就是沒有,刪除空修改空返回空。

4.訪問模型

var MyStudent = mongoose.model("Student");

到這里,已經基本完成了使用mongoose前提操作了。有沒有覺得有點繁瑣,其實我也覺得挺繁瑣,幸運的是234可以一步創建:

var MyStudent = mongoose.model("Student",{
  name: String,
  id: Number,
  phone: String,
  date: Date
});

5.創建實例(instance)

var sam = new MyStudent({
    name: "sam976",
    id: 123,
    phone: "18706888888",
    date: Date.now()
});

一般只在save(增加)操作中需要。

模型的實例是集合中真實的數據,就是collection中的document,用mysql中的術語來說就是一條記錄。模型在數據庫中建好了集合和文檔結構后,通過實例往里面添加真實的document。

捋一捋模式、模型、實例的關系:模式定義了操作和屬性,這些操作和屬性包括mongoose自帶和自定義,而模型和實例可以對模式里面定義的屬性和方法進行引用。模型是mongoose用來和數據庫直接打交道的中介,實例是往數據庫存的真實數據。模式并非必須,那為什么要分開模式和模型呢?我覺得是遵循了軟件設計中“定義和實現分開”這個原則。有的文章說模式沒有操作數據庫的能力,模型才有,對這個觀點,我覺得部分對,雖說模式不能直接操作數據庫,但模式定義的方法可以被模型用來操作數據庫。官方文檔是這么說的:

Schemas not only define the structure of your document and casting of properties, they also define document instance methods, static Model methods, compound indexes and document lifecycle hooks called middleware.

以上是使用mongoose進行增刪查改操作都需要經過的前提步驟,下面正式介紹對數據庫的增刪查改(CRUD)操作。

CRUD操作

1.CRUD之create

使用模型創建sam實例,sam實例調用save方法把document存入數據庫的students集合中,代碼如下

    var MyStudent = mongoose.model("Student");
    var sam = new MyStudent({
        name: "sam976",
        id: 123,
        phone: "18706888888",
        date: Date.now()
    });
    sam.save(function(err) {});

通過robomongo查看數據庫,可以看到數據已經存放成功,如圖

2.CRUD之read

使用MyStudent模型調用find()方法返回students集合的所有內容,第一個參數定義條件,第二個參數是回調函數,回調函數中的docs是返回的是查找結果,結果形式為一個json數據數組[{},{}]。

    var MyStudent = mongoose.model("Student");
    MyStudent.find({}, function(err, docs) {});

比如數據庫students集合中,有如下數據:

運行上面代碼,結果console.log輸出顯示如下:

模型還可以調用其他很多查詢的函數,比如

Model.findById(id, [projection], [options], [callback]);
Model.findOne([conditions], [projection], [options], [callback]);

篇幅較多,這里不攤開來講(以后會專門出一篇介紹),可以自己查看官方文檔關于Querying介紹

3.CRUD之update

使用MyStudent模型調用update()方法完成更新,第一個參數是條件(也就是where name="sam976"),第二個參數修改的內容。

    var MyStudent = mongoose.model("Student");
    MyStudent.update({name:"sam976"},{id:456,phone:"12345678910"}, function(error){});

運行如上代碼前,如圖

運行如上代碼后,如圖

4.CRUD之delete

使用MyStudent模型調用remove()方法刪除文檔。

var MyStudent = mongoose.model("Student");
MyStudent.remove({ name: "sam976" }, function (err) {});
源碼結構

使用mongoose的時候,通常會在項目中創建三個文件:connect.js,mongoose-db.js,app.js。

其中connect.js存放的是連接數據庫的操作,我們只需要加載一次即可在程序運行期間一直連接數據庫。

mongoose-db.js文件存放模式和模型的生成的代碼,沒有連接信息,也沒有其他額外不相干代碼,可以在在mongoose-db.js中把模型exports公開:

var MyStudent = mongoose.model("Student", Student_Schema);
exports.MyStudent=MyStudent;

/*定義其他模型和模式*/
var MyTeacher = mongoose.model("Teacher", Teacher_Schema);
exports.MyTeacher=MyTeacher;

然后在app.js中引用:

var MyStudent = require("./mongoose-db").MyStudent;
var MyTeacher = require("./mongoose-db").MyTeacher;

app.js存放對數據庫的操作,比如CRUD。通過這樣的方式,結構比較清晰,代碼可讀性大大增強。

下面放源碼(目的是給自己備份,笑臉...)

connect.js

var mongoose = require("mongoose");
mongoose.Promise = global.Promise;//為了解決過期的問題
/*調試模式是mongoose提供的一個非常實用的功能,用于查看mongoose模塊對mongodb操作的日志,一般開發時會打開此功能,以便更好的了解和優化對mongodb的操作。*/
mongoose.set("debug", true);
/*mongoose會緩存命令,只要connect成功,處于其前其后的命令都會被執行,connect命令也就無所謂放哪里*/
var db=mongoose.connect("mongodb://localhost/myDB");

db.connection.on("error", function (error) {  
  console.log("數據庫連接失?。? + error); 
});

db.connection.on("open", function () {  
  console.log("數據庫連接成功"); 

mongoose-db.js

require("./connect");
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
/*定義模式Student_Schema*/
var Student_Schema = new Schema({
  name: String,
  id: Number,
  phone: String,
  date: Date

}, {
  versionKey: false
});

/*定義模型Student,數據庫存的是students*/
var MyStudent = mongoose.model("Student", Student_Schema);
exports.MyStudent=MyStudent;

/*mongoose.Schema({
  username: {// 真實姓名
    type: String,
    required: true
  },
  password: { // 密碼
    type: String,
    required: true
  }
});*/

app.js

require("./mongoose-db");
var express = require("express");
var mongoose = require("mongoose");
var MyStudent = require("./mongoose-db").MyStudent;
var app = express();

app.use(express.static("./"));
app.get("/create", function(req, res) {
    console.log("create 函數")
    var beta = new MyStudent({
        name: "beta",
        id: 124,
        phone: "1871111111",
        date: Date.now()
    });
    beta.save(function(err) {
        if (err) {
            console.log(err);
        } else {
            console.log("存入成功");
        }
    });
    res.send("存入成功!!");

});

app.get("/read", function(req, res) {
    console.log("讀取函數");
    MyStudent.find({}, function(err, docs) {
        console.log(docs);
        /*對docs進行操作*/
    });

    res.send("讀取成功??!");

});

app.get("/readOne", function(req, res) {
    console.log("讀取單值函數");
    MyStudent.findOne({
        name: req.query.student_name
    }, {
        "id": 1,
        "_id": 0
    }, function(err, docs) {
        if (docs.id === req.query.student_id) {
            res.send("登錄成功");
            console.log(docs.password);
        } else {
            console.log(docs.password);
            res.send("登錄失敗");
        }
    });
    /*過濾查詢,參數2: {"name":1, "password":0} 查詢文檔的返回結果包含name , 不包含password.(_id默認是1)*/
    /*model.find({},null,{limit:20});過濾查詢,參數3: 游標操作 limit限制返回結果數量為20個,如不足20個則返回所有*/

});

app.get("/update", function(req, res) {
    console.log("更新函數");
    MyStudent.update({
        name: "sam976"
    }, {
        id: 456,
        phone: "12345678910"
    }, function(error) {});
    res.send("更新成功??!");

});

app.get("/delete", function(req, res) {
    console.log("刪除函數");
    MyStudent.remove({
        name: "sam976"
    }, function(err) {
        if (err) return handleError(err);
        // removed!
    });
    res.send("刪除成功!!");

});

app.listen(3001, function() {
    console.log("start server")
});

為了測試,我還寫了個html。data-operate.html





    
    data-operate



    




上文是在Node中基于Mongoose對MongoDB進行增刪查改(CRUD)操作的簡單介紹,以后會有進階的文章。

參考文獻:
Node.js 手冊查詢-3-Mongoose 方法
Mongoose Schemas v4.5.8
mongoose入門

CSDN個人博客地址--點擊這里

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/18866.html

相關文章

  • Node基于MongooseMongoDB進行增刪查改CRUD操作

    摘要:如圖連接成功后,顯示你的數據庫,在這個節目可以對數據庫進行操作。如圖安裝與加載首先假定你已經安裝了,命令行工具輸入在使用的文件中即可。創建讀取更新刪除單值讀取上文是在中基于對進行增刪查改操作的簡單介紹,以后會有進階的文章。 關鍵詞:mongodb安裝 mongoose使用 robomongo mongoose的CRUD操作 mongoose的查詢,增加,修改,刪除 工具介紹 Mon...

    lemon 評論0 收藏0
  • Mongoose增刪查改

    摘要:通過構造而成,除了具有定義的數據庫骨架以外,還可以具體的操作數據庫。通過創建的實體,它也可以操作數據庫。但比更具操作性。 原文鏈接:Mongoose 前言 學數據庫肯定需要知道怎么連接后臺Mongoose 是用來方便連接 MongoDB 與 node 的一個工具包是時候學習一波 nodejs連接MongoDB 連接數據庫前需要先打開數據庫 MongoDB yarn add mongoo...

    gityuan 評論0 收藏0
  • Mongoose查改刪學習筆記

    摘要:查詢條件控制返回的字段控制選項回調函數。改查詢條件需要修改的數據,不能修改主鍵控制選項回調函數,返回的是受影響的行數。執行查詢,回調函數。使用鏈式語句時,可以在之后接執行查詢,并指定回調函數。 初學Node.js接觸到MongoDB數據庫,閱讀資料中推薦的都是Mongoose模塊,可以更加方便的對數據庫進行操作,便開始接觸Mongoose。在學習時碰到許多基礎問題,查閱了許多資料理來理...

    lookSomeone 評論0 收藏0
  • VueCli+Node+mongodb打造個人博客(含前臺展示及后臺管理系統)(上)

    摘要:前言學習前端也有一段時間了做個個人博客網站吧正好總結練習一下這段時間的所學文章很長,會拆成三篇來講項目地址效果后臺管理系統前端頁面架構可以看到,在整個項目中,沒有頁面的跳轉只有前后端的數據交換,所有的頁面更新都是組件更新和數據更新后端只對數 前言 學習前端也有一段時間了做個個人博客網站吧正好總結練習一下這段時間的所學文章很長,會拆成三篇來講 項目github地址:https://git...

    不知名網友 評論0 收藏0
  • VueCli+Node+mongodb打造個人博客(含前臺展示及后臺管理系統)(上)

    摘要:前言學習前端也有一段時間了做個個人博客網站吧正好總結練習一下這段時間的所學文章很長,會拆成三篇來講項目地址效果后臺管理系統前端頁面架構可以看到,在整個項目中,沒有頁面的跳轉只有前后端的數據交換,所有的頁面更新都是組件更新和數據更新后端只對數 前言 學習前端也有一段時間了做個個人博客網站吧正好總結練習一下這段時間的所學文章很長,會拆成三篇來講 項目github地址:https://git...

    tinyq 評論0 收藏0

發表評論

0條評論

SillyMonkey

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<