课时50 mongoose简介
mongoose网站:https://mongoosejs.com/
为什么要用Mongoose?
Mongoose就是一个让我们可以通过Node来操作MongoDB的一个模块。
Mongoose本质是一个对象文档模型(ODM)库,
他对Node原生的MongoDB模块进行了一部优化封装,并且提供了更多的功能。
Mongoose的优势:
- 可以像操作对象一样操作数据库
- 可以为文档创建一个模式结构(Schema)
- 可以对模型中的文档/文档进行验证
- 数据可以通过类型转换为对象模型
- 可以使用中间件来应用业务逻辑挂钩
- 比Node原生的MongoDB驱动更容易
下载安装mongoose模块:
cnpm install mongoose --save
代码:
//引入mongoose模块
let mongoose= require('mongoose');
//链接数据库
mongoose.connect('mongodb://localhost/m_data');
//监听各种状态
let db= mongoose.connection;
db.on('error', ()=>{
console.log("连接失败!");
})
db.once('open', ()=>{
console.log("连接成功!")
})
db.once('close', ()=>{
console.log('连接已经断开成功!')
})
课时51 mongoose基本使用
mongoose的几个新的对象
- Schema(模型对象);
Schema对象定义约束了数据库中的文档结构 - Model
Model 对象作为集合中所有文档的表示,相当于MongoDB数据库中的集合(collection) - Document
Document表示集合中的的具体文档
代码:
//1. 引入mongoose
let mongoose= require('mongoose');
mongoose.connect('mongodb://localhost/m_data');
let db= mongoose.connection;
db.on('open', ()=>{
console.log('连接成功!')
})
//2. 新建Schema (表/ 模式对象) 定义规则/字段的规则
let Schema= mongoose.Schema;
//定义personSchema的字段(规则) 有点像构造函数的样子
let personSchema= new Schema({
name: String,
sex: String,
age: Number
});
//3. 创建model(集合)
let personModel= mongoose.model('person', personSchema);
// 插入数据中 会自动把name变成负数-》people
//4. 插入文档
personModel.create({
name: '张宁乐',
sex: '男',
age: 18
}, (err)=>{
if(!err){
console.log('插入成功!')
}else{
throw err;
}
});
personModel.create({
name: '牛明星',
sex: '女',
age: 18
}, (err)=>{
if(!err){
console.log('插入成功!')
}else{
throw err;
}
});
课时52 插入多条数据
bd624efb0be6d765776da4f361632b2.png插入多条数据
personModel.create([
{name:'张逗逗',age: 2,sex: '男'},
{name:'牛嘻嘻',age: 2,sex: '女'},
{name:'张牛',age: 5,sex: '女'}
], (err)=>{
if(!err){
console.log('插入成功!')
}else{
throw err;
}
})
课时53 mongoose for find()
mongoose查找数据:
https://mongoosejs.com/docs/api.html#model_Model.find
代码:
- 引入mongoose
let mongoose= require('mongoose');
mongoose.connect('mongodb://localhost/m_data');
let db= mongoose.connection;
db.on('open', ()=>{
console.log('连接成功!')
})
- 新建Schema (表)
let Schema= mongoose.Schema;
//定义personSchema的字段(规则) 有点像构造函数的样子
let personSchema= new Schema({
name: String,
sex: String,
age: Number
});
- 创建model(集合)
let personModel= mongoose.model('person', personSchema);
// 插入数据中 会自动把name变成复数-》people
4.插入多条数据
personModel.create([
{name:'张逗逗',age: 2,sex: '男'},
{name:'牛嘻嘻',age: 2,sex: '女'},
{name:'张牛',age: 5,sex: '女'}
], (err)=>{
if(!err){
console.log('插入成功!')
}else{
throw err;
}
})
- 查询
5.1 查询name:'张宁乐' 的数据
personModel.find({name: '张宁乐'}, (err, data)=>{
if(!err){
console.log(data)
}else{
throw err;
}
})
5.2 find({}, callback) 查询所有
personModel.find({}, (err, data)=>{
if(!err){
console.log(data)
}else{
throw err;
}
})
5.3 也可以映射(0隐藏 1显示 id默认显示) 和MongoDB在命令行中的使用方法一样
查询时只显示name
personModel.find({}, {name: 1, _id: 0}, (err,data)=>{
if(!err){
console.log(data)
}else{
throw err;
}
})
5.4 在find() 中 skip(查询开始的位置)和limit(增加的条数)也可以使用
personModel.find({}, {name: 1, _id: 0, age: 1}, {skip: 0, limit: 2}, (err, data)=>{
//只显示name 和 age 从第1开始 每次查询2条
if(!err){
console.log(data)
}else{
throw err;
}
})
48d986b677f7794a0d51a1301de7d0e.png
//MongoDB的命令行的find() findOne() 等在 mongoose里都可以使用 具体可参考 :https://mongoosejs.com/docs/api.html#model_Model.find
课时54 mongoose-改和删(掌握)
参考: https://mongoosejs.com/docs/api.html#model_Model.update
修改的方法:
- Model.update()
- Model.updateMany()
- Model.updateOne()
- Model.watch()
代码:
- 引入mongoose
let mongoose= require('mongoose');
mongoose.connect('mongodb://localhost/m_data');
let db= mongoose.connection;
db.on('open', ()=>{
console.log('连接成功!')
})
- 新建Schema (表)
let Schema= mongoose.Schema;
//定义personSchema的字段(规则) 有点像构造函数的样子
let personSchema= new Schema({
name: String,
sex: String,
age: Number
});
- 创建model(集合)
let personModel= mongoose.model('person', personSchema);
4.插入多条数据
personModel.create([
{name:'张逗逗',age: 2,sex: '男'},
{name:'牛嘻嘻',age: 2,sex: '女'},
{name:'张牛',age: 5,sex: '女'}
], (err)=>{
if(!err){
console.log('插入成功!')
}else{
throw err;
}
})
- 修改 {multi:true} 修改全部 或者直接使用 updateMany() 修改全部
- Model.update()
- Model.updateMany()
- Model.updateOne()
- Model.watch()
personModel.update({name: '张宁乐'}, {$set: {age: 20}}, (err, data)=>{
if(!err){
console.log('修改成功!')
console.log(data)
}else{
throw err;
}
})
4a9f49d480f66c5a64cb9a833459fdd.png
- 删除
- Model.remove()
- Model.deleteMany()
- Model.deleteOne()
personModel.remove({name:'牛嘻嘻'}, (err)=>{
if(!err){
console.log('删除成功!')
}else{
throw err;
}
})
- 统计文档条数 Model.count()
personModel.count({}, (err,count)=>{
if(!err){
console.log('查询条数成功! 一共:' + count + '条');
}else{
throw err;
}
})
2b7684dc310af51ac7fb50e5daa1123.png
课时55 mongoose-补充
可以先创建一个文档对象,然后通过方法吧文档放到集合当中
代码:
//创建文档 把文档放到集合当中也可以
//1. 引入mongoose
let mongoose= require('mongoose');
mongoose.connect('mongodb://localhost/m_data');
let db= mongoose.connection;
db.on('open', ()=>{
console.log('连接成功!')
})
//2. 新建Schema (表)
let Schema= mongoose.Schema;
//定义personSchema的字段(规则) 有点像构造函数的样子
let personSchema= new Schema({
name: String,
sex: String,
age: Number
});
//3. 创建model(集合)
let personModel= mongoose.model('person', personSchema);
- 创建一个Document(文档)
let person= new personModel({
name: '许巍',
sex: '男',
age: 38
})
- 把创建的文档对象 塞进这个personModel集合当中 Document.prototype.save();
person.save((err, person)=>{
if(!err){
console.log('保存成功!')
console.log(person);
}else{
console.log('保存失败!')
}
})
c85c9b12f87f890e10e74f23555c802.png
网友评论