一雪侥、mongoose 介紹
mongoose
是在node.js 異步環(huán)境下對mongodb 進行便捷操作的對象模型工具。mongoose
是NodeJS 的驅動肩刃,不能作為其他語言的驅動缚忧。
Mongoose 有兩個特點
- 1、通過關系型數據庫的思想來設計非關系型數據庫
- 2如蚜、基于
mongodb
模塊 驅動鸟廓,簡化操作
二、mongoose 的安裝以及使用
2.1 安裝
npm install mongoose --save
2.2 引入mongoose并連接數據庫
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test');
如果mongodb數據庫有賬號密碼:
/**通過mongodb://username:password@host1:port/database_name?authSource指定驗證前面身份信息的數據庫來源 */
mongoose.connect('mongodb://賬號:密碼@ip地址:27017/集合名稱?authSource=admin',{
useNewUrlParser: true,
});
2.3 定義Schema
Schema是mongoose 里會用到的一種數據模式续语,可以理解為表結構的定義垂谢;每個schema 會映射到mongodb 中的一個collection,它不具備操作數據庫的能力疮茄,只是對數據庫集合的各個字段類型的規(guī)范定義滥朱。
var UserSchema=mongoose.Schema({
name: String,
age:Number,
status:'number'
})
2.4 創(chuàng)建數據模型
定義好了Schema
,接下就是生成Model
力试。model 是由schema 生成的模型徙邻,可以對數據庫的操作。
mongoose.model 里面可以傳入兩個參數也可以傳入三個參數:
- mongoose.model(參數1:模型名稱(首字母大寫)畸裳,參數2:Schema)
- mongoose.model(參數1:模型名稱(首字母大寫)缰犁,參數2:Schema,參數3:集合名稱)
如果傳入2 個參數的話:User
模型會默認去操作與User
模型同名的復數形式的集合怖糊,如通過下面方法創(chuàng)建模型帅容,那么這個模型將會操作users
這個集合:
var User=mongoose.model('User', UserSchema);
如果傳入3 個參數的話:模型默認操作第三個參數定義的集合名稱,如下面的代碼伍伤,模型User
會指定操作user
這個集合:
var User=mongoose.model('User', UserSchema, 'user');
2.5 查找數據
/**模型.find({查詢條件}, (err, data)=>{回調函數}) */
User.find({}, (err, docs)=>{
if(err){
console.log(err);
return;
}
console.log(docs);
});
2.6 增加數據
/*模型實例化*/
const news = new News({
title:'新聞標題',
author:'joyitsai',
pic:'01.png',
content:'新聞內容',
status: 1
});
/*實例.save((err,docs)=>{回調函數}) 來將數據保存到數據庫*/
news.save((err, docs)=>{
if(err){
console.log('添加數據出錯');
return;
}
console.log(docs);
});
2.7 修改數據
News.updateOne(
{'_id':'5cf5e613ba3c6298a8734973'}, //條件
{title: '這是一則新聞111'}, //要更新的內容
/*回調函數*/
(err, docs)=>{
if(err){return console.log('更新數據失敗');}
console.log(docs);
}
)
2.8 刪除數據
News.deleteOne(
{'_id':'5cf5e613ba3c6298a8734973'}, //查找條件
/*回調函數*/
(err,docs)=>{
if(err){return console.log('刪除數據失敗')}
console.log(docs);
}
)
2.9 保存成功查找
News.updateOne(
{'_id':'5cf5e613ba3c6298a8734973'}, //條件
{title: '這是一則新聞111'}, //要更新的內容
(err, docs)=>{
if(err){
return console.log('更新數據失敗');
}
/**更新數據成功并徘,緊接著查詢數據 */
News.find({},(err, docs)=>{
if(err){
return console.log(err)
}
console.log(docs);
})
}
)