最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

node使用Mongoose類庫實(shí)現(xiàn)簡單的增刪改查

 更新時(shí)間:2018年11月08日 09:34:40   作者:涂根華  
Mongoose是在nodejs環(huán)境中對(duì)MongoDB數(shù)據(jù)庫操作的封裝,這篇文章主要介紹了node使用Mongoose類庫實(shí)現(xiàn)簡單的增刪改查,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

Mongoose是在nodejs環(huán)境中對(duì)MongoDB數(shù)據(jù)庫操作的封裝,一種對(duì)象模型工具,可以將數(shù)據(jù)庫中的數(shù)據(jù)轉(zhuǎn)換為javascript對(duì)象供我們使用。

Mongoose安裝

npm install mongoose

安裝成功后,我們就可以使用 require('mongoose')來使用了;

下面是鏈接本地?cái)?shù)據(jù)庫 mongoosedb,代碼如下:

var mongoose = require('mongoose');
var DB_URL = 'mongodb://localhost:27017/dataDb';

/* 鏈接 */
mongoose.connect(DB_URL);

/* 鏈接成功 */
mongoose.connection.on('connected', function() {
 console.log('Mongoose connection open to ' + DB_URL);
});

// 鏈接異常
mongoose.connection.on('error', function(err) {
 console.log('Mongoose connection error:' + err);
});

// 鏈接斷開

mongoose.connection.on('disconnected', function() {
 console.log('Mongoose connection disconnected');
});

如下圖所示

從如上代碼,監(jiān)聽了幾個(gè)事件,并且執(zhí)行觸發(fā)了connected事件,這表示連接成功。

2. Schema介紹

它是一種以文件形式存儲(chǔ)的數(shù)據(jù)庫模型骨架,不具備對(duì)數(shù)據(jù)庫操作的能力,僅僅只是數(shù)據(jù)庫在程序片段中的一種表現(xiàn),可以理解為表結(jié)構(gòu)。

那么如何去定義一個(gè)Schema呢?請(qǐng)看如下代碼:

var mongoose = require('mongoose');
var TestSchema = new mongoose.Schema({
 name: { type: String }, // 屬性name,類型為String
 age: { type: Number, default: 30 }, // 屬性age,類型為Number,默認(rèn)值為30
 time: { type: Date, default: '當(dāng)前時(shí)間' }
});

如上在我們的TestSchema中每個(gè)key在我們的文件將被轉(zhuǎn)換為相關(guān)的SchemaType定義的一個(gè)屬性。允許使用的SchemaTypes有如下類型:

  • String
  • Number
  • Date
  • Buffer
  • Boolean
  • Mixed
  • ObjectId
  • Array

如果我們?cè)谌缟暇帉懲瓿珊螅覀冃枰砑宇~外的鍵的話,我們可以使用Schema中的add方法.

3. 創(chuàng)建一個(gè)模型

我們上面定義了Schema,我們需要將我們的TestSchema轉(zhuǎn)成我們可以使用的模型,模型具有對(duì)數(shù)據(jù)庫操作的能力。
我們可以通過 mongoose.model(modelName, schema);

先來結(jié)合schema和創(chuàng)建一個(gè)模型來簡單的看一個(gè)demo,如下代碼:

var mongoose = require('mongoose');
// schema定義
var TestSchema = new mongoose.Schema({
 name: { type: String },
 age: { type: String },
 sex: { type: String }
});

// 創(chuàng)建model
var TestModel = mongoose.model('test1', TestSchema);

// 初始化數(shù)據(jù) 
var TestInt = new TestModel({
 name: 'kongzhi',
 age: '30',
 sex: 'girl'
});

console.log(TestInt.name); // kongzhi
console.log(TestInt.age); // 30
console.log(TestInt.sex); // girl

下面我們來簡單的使用上面定義的內(nèi)容,來做個(gè)簡單的數(shù)據(jù)庫增刪改查的操作。

1. 在項(xiàng)目中的根目錄下新建一個(gè)db.js, 代碼如下:

var mongoose = require('mongoose');
var DB_URL = 'mongodb://localhost:27017/dataDb';

/* 鏈接 */
mongoose.connect(DB_URL);

/* 鏈接成功 */
mongoose.connection.on('connected', function() {
 console.log('Mongoose connection open to ' + DB_URL);
});

// 鏈接異常
mongoose.connection.on('error', function(err) {
 console.log('Mongoose connection error:' + err);
});

// 鏈接斷開

mongoose.connection.on('disconnected', function() {
 console.log('Mongoose connection disconnected');
});

module.exports = mongoose;

2. 下面我們新建一個(gè)user的Schema,命名為user.js, 它有如下屬性,如下代碼:

/*
 定義一個(gè)user的Schema
*/
var mongoose = require('./db.js');
var Schema = mongoose.Schema;

var UserSchema = new Schema({
 username: { type: String }, // 用戶名
 password: { type: String }, // 密碼
 age: { type: Number }, // 年齡
});

/* model 是由schema生成的模型,具有對(duì)數(shù)據(jù)庫操作的能力 */

module.exports = mongoose.model('User', UserSchema);

3. 數(shù)據(jù)庫操作,我們新建一個(gè)文件叫 app.js

3.1 插入數(shù)據(jù)(Model.save([fn])),代碼如下:

var User = require('./user.js');
// 插入數(shù)據(jù)

var user = new User({
 username: 'kongzhi0707',
 password: '123456',
 age: 30
});

user.save(function(err, res) {
 if (err) {
  console.log(err);
 } else {
  console.log(res);
 }
});

然后在命令行中運(yùn)行app.js ,可以看到如下:

然后我們?cè)俚奖镜財(cái)?shù)據(jù)庫中查看數(shù)據(jù),可以看到新增一條數(shù)據(jù),如下圖所示

從數(shù)據(jù)庫中可以看到插入數(shù)據(jù)成功了;

3.2 更新數(shù)據(jù)(Model.update(conditions, doc, [options], [callback]))

conditions: 更新的條件,該值是一個(gè)對(duì)象。
doc: 需要更新的內(nèi)容,該值也是一個(gè)對(duì)象。
options: 可選參數(shù),它有如下屬性:
safe :(布爾型)安全模式(默認(rèn)為架構(gòu)中設(shè)置的值(true))
upsert :(boolean)如果不匹配,是否創(chuàng)建文檔(false)
multi :(boolean)是否應(yīng)該更新多個(gè)文檔(false)
runValidators:如果為true,則在此命令上運(yùn)行更新驗(yàn)證程序。更新驗(yàn)證器根據(jù)模型的模式驗(yàn)證更新操作。
strict:(布爾)覆蓋strict此更新的選項(xiàng)
overwrite: (布爾)禁用只更新模式,允許您覆蓋文檔(false)
callback: 回調(diào)函數(shù)

如下代碼執(zhí)行更新:

var User = require('./user.js');

// 更新數(shù)據(jù) 

function update() {
 // 更新數(shù)據(jù)的條件查詢
 var wherestr = {'username': 'kongzhi0707'};

 // 執(zhí)行更新數(shù)據(jù)
 var updatestr = {'password': 'abcdef'};

 User.update(wherestr, updatestr, function(err, res) {
  if (err) {
   console.log(err);
  } else {
   console.log(res);
  }
 });
}
// 調(diào)用更新函數(shù)
update();

運(yùn)行app.js 后,如下圖所示:

繼續(xù)查看數(shù)據(jù)庫,可以看到password字段被更新了,如下圖所示:

3.3 findByIdAndUpdate(id, [update], [options], [callback]);

根據(jù)id進(jìn)行更新;此id就是數(shù)據(jù)庫中自動(dòng)生成的id;如下代碼,

var User = require('./user.js');

// 更新數(shù)據(jù) 

function update() {
 // 更新數(shù)據(jù)的條件查詢
 var id = '5b3a4941ca11752732fee772';

 // 執(zhí)行更新數(shù)據(jù)
 var updatestr = {'password': 'vvvvv'};

 User.findByIdAndUpdate(id, updatestr, function(err, res) {
  if (err) {
   console.log(err);
  } else {
   console.log(res);
  }
 });
}
// 調(diào)用更新函數(shù)
update();

如下圖數(shù)據(jù)庫顯示如下:

3.4 刪除 Model.remove(conditions, [callback])

代碼如下:

var User = require('./user.js');

function del() {
 // 刪除數(shù)據(jù)的條件
 var wherestr = {'username': 'kongzhi0707'};

 User.remove(wherestr, function(err, res) {
  if (err) {
   console.log(err);
  } else {
   console.log(res);
  }
 });
}
// 調(diào)用函數(shù)
del();

到數(shù)據(jù)庫中查看數(shù)據(jù),可以看到?jīng)]有這條數(shù)據(jù)了;

3.5 條件查詢 Model.find(conditions, [fields], [options], [callback]);

如下代碼所示:

var User = require('./user.js');
function find() {
 // 刪除數(shù)據(jù)的條件
 var wherestr = {'userName': '龍恩0707'};

 User.find(wherestr, function(err, res) {
  if (err) {
   console.log(err);
  } else {
   console.log(res);
  }
 });
}
// 調(diào)用函數(shù)
find();

執(zhí)行后,如下所示:

3.6 數(shù)量查詢 Model.count(conditions, [callback])

var User = require('./user.js');

function getCountByConditions() {

 User.count({}, function(err, res) {
  if (err) {
   console.log(err);
  } else {
   console.log(res); // 會(huì)輸出數(shù)據(jù)庫數(shù)據(jù)的數(shù)量
  }
 });
}
// 調(diào)用函數(shù)
getCountByConditions();

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Node.js中的進(jìn)程間通信

    Node.js中的進(jìn)程間通信

    這篇文章主要介紹了Node.js中的進(jìn)程間通信,文章圍繞主題展開詳細(xì)的內(nèi)容戒殺,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-09-09
  • 淺談Node.js ORM框架Sequlize之表間關(guān)系

    淺談Node.js ORM框架Sequlize之表間關(guān)系

    下面小編就為大家?guī)硪黄獪\談Node.js ORM框架Sequlize之表間關(guān)系。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • node.js利用mongoose獲取mongodb數(shù)據(jù)的格式化問題詳解

    node.js利用mongoose獲取mongodb數(shù)據(jù)的格式化問題詳解

    這篇文章主要給大家介紹了關(guān)于node.js利用mongoose獲取mongodb數(shù)據(jù)的格式化問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)把。
    2017-10-10
  • 詳解Node.js如何處理ES6模塊

    詳解Node.js如何處理ES6模塊

    學(xué)習(xí)JavaScript語言,你會(huì)發(fā)現(xiàn)它有兩種格式的模塊。一種是ES6模塊,簡稱ESM;另一種是Node.js專用的CommonJS模塊,簡稱 CJS。這兩種模塊不兼容。很多人使用Node.js,只會(huì)用require()加載模塊,遇到ES6模塊就不知道該怎么辦。本文就來談?wù)凟S6模塊在Node.js里面怎么使用。
    2021-05-05
  • NodeJS實(shí)現(xiàn)圖片文本分割

    NodeJS實(shí)現(xiàn)圖片文本分割

    這篇文章主要為大家詳細(xì)介紹了NodeJS實(shí)現(xiàn)圖片文本分割,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • nodejs使用PassThrough流進(jìn)行數(shù)據(jù)傳遞合并示例詳解

    nodejs使用PassThrough流進(jìn)行數(shù)據(jù)傳遞合并示例詳解

    這篇文章主要為大家介紹了nodejs使用PassThrough流進(jìn)行數(shù)據(jù)傳遞合并示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Node.js爬取豆瓣數(shù)據(jù)實(shí)例分析

    Node.js爬取豆瓣數(shù)據(jù)實(shí)例分析

    這篇文章通過實(shí)例給大家詳細(xì)分析了Node.js爬取豆瓣數(shù)據(jù)的過程以及具體方法步驟,有興趣的朋友可以參考學(xué)習(xí)下。
    2018-03-03
  • 淺析nodejs實(shí)現(xiàn)Websocket的數(shù)據(jù)接收與發(fā)送

    淺析nodejs實(shí)現(xiàn)Websocket的數(shù)據(jù)接收與發(fā)送

    WebSocket是HTML5開始提供的一種瀏覽器與服務(wù)器間進(jìn)行全雙工通訊的網(wǎng)絡(luò)技術(shù),本文給大家介紹nodejs實(shí)現(xiàn)websocket的數(shù)據(jù)庫接收與發(fā)送,小伙伴們一起學(xué)習(xí)吧
    2015-11-11
  • 關(guān)于Node.js中的JXcore打包示例

    關(guān)于Node.js中的JXcore打包示例

    這篇文章主要介紹了關(guān)于Node.js中的JXcore打包示例,JXcore 是一個(gè)支持多線程的 Node.js 發(fā)行版本,基本不需要對(duì)你現(xiàn)有的代碼做任何改動(dòng)就可以直接線程安全地以多線程運(yùn)行,需要的朋友可以參考下
    2023-05-05
  • 解決node.js含有%百分號(hào)時(shí)發(fā)送get請(qǐng)求時(shí)瀏覽器地址自動(dòng)編碼的問題

    解決node.js含有%百分號(hào)時(shí)發(fā)送get請(qǐng)求時(shí)瀏覽器地址自動(dòng)編碼的問題

    這篇文章主要介紹了解決node.js含有%百分號(hào)時(shí)發(fā)送get請(qǐng)求時(shí)瀏覽器地址自動(dòng)編碼的問題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評(píng)論

马龙县| 黑龙江省| 珠海市| 通州区| 二连浩特市| 满城县| 湖南省| 赣榆县| 河曲县| 塔城市| 本溪| 长治市| 澄城县| 南雄市| 长宁区| 游戏| 白沙| 洞口县| 依兰县| 康定县| 望江县| 甘谷县| 贺州市| 凤城市| 德令哈市| 郸城县| 元朗区| 定南县| 长阳| 双鸭山市| 宜宾县| 巨鹿县| 弋阳县| 察雅县| 鹰潭市| 崇左市| 乌什县| 张家川| 梅河口市| 华容县| 昭通市|