mongoose 入门以及 mongoose 实现数据 的增、删、改、查
一、mongoose 介绍
Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具。Mongoose 是 NodeJS 的驱动,不能作为其他语言的驱动。
Mongoose 有两个特点
1、通过关系型数据库的思想来设计非关系型数据库
2、基于 mongodb 驱动,简化操作
二、mongoose 的安装以及使用
官网:https://mongoosejs.com/
1. 安装
npm i mongoose --save
2、引入 mongoose 并连接数据库
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
如果有账户密码需要采用下面的连接方式:
mongoose.connect('mongodb://eggadmin:123456@localhost:27017/eggcms');
3、定义 Schema
数据库中的 Schema,为数据库对象的集合。schema 是 mongoose 里会用到的一种数据模式, 可以理解为表结构的定义;每个 schema 会映射到 mongodb 中的一个 collection,它不具备 操作数据库的能力
var UserSchema=mongoose.Schema({
name: String,
age:Number,
status:'number'
})
4、创建数据模型
定义好了 Schema,接下就是生成 Model。model 是由 schema 生成的模型,可以对数据库的 操作。
注意:mongoose.model 里面可以传入两个参数也可以传入三个参数
mongoose.model(参数 1:模型名称(首字母大写),参数 2:Schema)
mongoose.model(参数 1:模型名称(首字母大写),参数 2:Schema,参数 3:数据库集合名 称)
如果传入 2 个参数的话:这个模型会和模型名称相同的复数的数据库建立连接:如通过下面 方法创建模型,那么这个模型将会操作 users 这个集合。
如果传入 3 个参数的话:模型默认操作第三个参数定义的集合名称
var User=mongoose.model('User', UserSchema);
5、查找数据
User.find({},function(err,docs){
if(err){
console.log(err);
return;
}
console.log(docs);
})
6、增加数据
var u=new User({
//实例化模型 传入增加的数据
name:'lisi2222333',
age:20,
status:true
})
u.save();
7、修改数据
User.updateOne({ name: 'lisi2222' }, { name: '哈哈哈' }, function(err, res) {
if(err){
console.log(err);
return;
}
console.log('成功') });
8、删除数据
User.deleteOne({ _id: '5b72ada84e284f0acc8d318a' }, function (err) {
if (err) {
console.log(err);
return;
}
// deleted at most one tank document
console.log('成功');
})
9、保存成功查找
var u=new User({
name:'lisi2222333',
age:20,
status:true //类型转换
})
u.save(function(err,docs){
if(err){
console.log(err);
return;
}
//console.log(docs);
User.find({},function(err,docs){
if(err){
console.log(err);
return;
}
console.log(docs);
})
});
10、案例
//1.引入mongoose
const mongoose = require('mongoose');
//2、建立连接
mongoose.connect('mongodb://127.0.0.1:27017/eggcms');
//3、操作users表(集合) 定义一个Schema Schema里面的对象和数据库表里面的字段需要一一对应
var UserSchema = mongoose.Schema({
username: String,
age: Number,
status: Number
})
//4、定义数据库模型 操作数据库
// model里面的第一个参数 要注意:1首字母大写 2、要和数据库表(集合 )名称对应 这个模型会和模型名称相同的复数的数据库表建立连接
// var User=mongoose.model('User',UserSchema); // 默认会操作 users表(集合)
var User = mongoose.model('User', UserSchema, 'user'); //默认会操作第三个参数配置的表 user表(集合)
//5、查询users表的数据
// User.find({}, (err, doc) => {
// if (err) {
// console.log(err)
// return
// }
// console.log(doc)
// })
//6、增加数据
// 6.1实例化 Model 通过实例化User Molde 创建增加的数据
//6.2 实例.save()
// const user = new User({
// username: 'zhaoliu',
// age: 16,
// status: 1
// })
// user.save((err, doc) => {
// if (err) {
// console.log(err)
// return
// }
// console.log(doc)
// })
//7、修改数据
// User.updateOne({ username: 'zhaoliu' }, { username: '赵柳' }, (err, doc) => {
// if (err) {
// console.log(err)
// return
// }
// console.log(doc)
// })
//8、删除数据
User.deleteOne({ age: 20 }, (err, result) => {
if (err) {
console.log(err)
return
}
console.log(result)
})
三、mongoose默认参数
// mongoose 默认参数:增加数据的时候,如果不传入数据会使用默认配置的数据
var mongoose=require('mongoose');
//useNewUrlParser这个属性会在url里识别验证用户所需的db,未升级前是不需要指定的,升级到一定要指定。
mongoose.connect('mongodb://127.0.0.1:27017/eggcms',{ useNewUrlParser: true },function(err){
if(err){
console.log(err);
return;
}
console.log('数据库连接成功')
});
// 定义数据表(集合的)映射 注意:字段名称必须和数据库保持一致
var UserSchema=mongoose.Schema({
name:String,
age:Number,
status:{
type:Number,
default:1
}
})
//定义model操作数据库
var UserModel=mongoose.model("User",UserSchema,'user');
//数据的查找
// UserModel.find({},function(err,doc){
// if(err){
// console.log(err);
// return;
// }
// console.log(doc);
// })
//数据的增加
// var user=new UserModel({
// name:'张三88888888888888',
// age:40,
// status:1,
// sex:"男"
// })
// user.save(function(err){
// if(err){
// console.log(err);
// return;
// }
// console.log('增加数据成功')
// });
var user=new UserModel({
name:'张三6666666666666666',
age:30
})
user.save(function(err){
if(err){
console.log(err);
return;
}
console.log('增加数据成功')
});
四、mongoose模块化
在上面的基础上进行模块化封装
在model下创建db.js和user.js
db.js
//连接数据库
var mongoose = require('mongoose');
//useNewUrlParser这个属性会在url里识别验证用户所需的db,未升级前是不需要指定的,升级到一定要指定。
mongoose.connect('mongodb://127.0.0.1:27017/eggcms', { useNewUrlParser: true }, function (err) {
if (err) {
console.log(err);
return;
}
console.log('数据库连接成功')
});
module.exports = mongoose;
user.js
var mongoose = require('./db.js');
var UserSchema = mongoose.Schema({
name: String,
age: Number,
status: {
type: Number,
default: 1
}
})
module.exports = mongoose.model('User', UserSchema, 'user');
app.js
var UserModel=require('./model/user.js');
var user=new UserModel({
name:"李四666",
age:40
})
user.save(function(err){
if(err){
console.log(err);
return;
}
//获取user表的数据
UserModel.find({},function(err,docs){
if(err){
console.log(err);
return;
}
console.log(docs);
})
})