nodejs结合Mongodb,实现数据库的增删改查
- 1.安装mongoose
- 2.连接数据库
- 2.1 确保数据库连接池是已打开状态(准备工作)
- 2.2 新建一个db.js文件,准备连接数据库
- 2.3 生成自定义模块
- 3. 设计用户数据表
- 4. 增删改查操作
- 4.1 增
- 4.2 删
- 4.3 改
- 4.4 查
- 5. 封装数据库模块
- 5.1 目录结构
- 5.2 封装数据库增删改查
- 5.3 测试数据库的增删改查
1.安装mongoose
首先安装mongoose插件,在控制台输入如下命令。
cnpm i mongoose -S
-S --save
-D --save-dev
2.连接数据库
2.1 确保数据库连接池是已打开状态(准备工作)
D盘mongodb文件夹内解压下载好的mongodb文件,D盘根目录下创建一个文件夹data,在data内部再创建一个文件夹db。
进入mongodb的bin目录,按住Shift键,空白处再点击鼠标右键,打开命令行窗口,输入下面的指令。
mongod --dbpath d:\data\db
2.2 新建一个db.js文件,准备连接数据库
const mongoose = require('mongoose');
const DB_URL = 'mongodb://127.0.0.1:27017/sh1902';
mongoose.connect(DB_URL, { useNewUrlParser: true });
mongoose.connection.on('connected', () => {
console.log('数据库已经连接成功');
});
mongoose.connection.on('disconnected', () => {
console.log('数据库连接失败');
});
mongoose.connection.on('error', () => {
console.log('数据库连接异常');
});
在控制台输入node db.js指令,应出现“数据库连接成功”的字样。
2.3 生成自定义模块
依据模块化开发,需要将db.js连接数据库的文件暴露出去,生成一个自定义模块。
const mongoose = require('mongoose');
const DB_URL = 'mongodb://127.0.0.1:27017/sh1902';
mongoose.connect(DB_URL, { useNewUrlParser: true });
mongoose.connection.on('connected', () => {
console.log('数据库已经连接成功');
});
mongoose.connection.on('disconnected', () => {
console.log('数据库连接失败');
});
mongoose.connection.on('error', () => {
console.log('数据库连接异常');
});
module.exports = mongoose;
3. 设计用户数据表
设计数据表的形式,暴露数据模型,并在数据库中创建一个集合。
创建一个名为user.js的文件。
const mongoose = require('./db.js');
const Schema = mongoose.Schema;
const UserSchema = new Schema({
username: { type: String },
password: { type: String },
age: { type: Number },
tel: { type: String },
sex: { type: String },
city: { type: String }
});
// 执行时 会在数据库中创建users集合
module.exports = mongoose.model('User', UserSchema);
注意
module.exports = mongoose.model('User', UserSchema);
其中的User为自定义名称,数据库中会出现其复数的集合。例如:
module.exports = mongoose.model(‘Test’, UserSchema);
此时,数据库会出现tests的集合。
4. 增删改查操作
4.1 增
新建insert.js用来添加新用户
// 插入用户
const User = require('./users');
const user = new User({
username: '李思思',
password: '123',
age: 22,
tel: '13248099856',
sex: '女',
city: '山西'
})
user.save((err) => {
if (err) throw err;
console.log('用户插入成功')
})
4.2 删
新建一个delete.js文件
const User = require('./users');
//第一种写法
// User.deleteOne({username: '李思思'}, err => {
// if (err) throw err;
// console.log('删除成功')
// })
// style.display = 'flex' <==> style['display'] = 'flex'
//第二种写法
User['deleteOne']({username: '李思思'}, err => {
if (err) throw err;
console.log('删除成功')
})
4.3 改
新建update.js用来修改数据
const User = require('./users');
User.updateOne({username: '李思思'}, {$set: {age: 20}}, err => {
if (err) throw err;
console.log('修改成功')
})
User.updateMany({}, {$set: {city:'江苏'}}, err => {
if (err) throw err;
console.log('修改成功')
})
4.4 查
新建find.js用来测试增删改相关文件的功能,也可以用来查询数据库。
const User = require('./users');
User.find({}, {}, (err, data) => {
if (err) throw err
console.log(data)
})
另一种查询数据库的写法,可添加排序功能。(推荐)
const User = require('./users');
User.find({}, {_id: 0, __v: 0}).sort({age: 1}).exec((err, data) => {
if (err) throw err;
console.log(data)
})
5. 封装数据库模块
5.1 目录结构
sql
model
user.js
db.js
index.js
其中,users.js文件和db.js文件为之前所写文件,唯一有所变化的部分是user.js引入db.js的路径需要修改。
5.2 封装数据库增删改查
index.js为新建封装数据库的增删改查文件,同时使用promise方法解决异步数据问题。
const sql = {
//增
insert(Collection, insertobj) {
return new Promise((resolve, reject) => {
Collection.insertMany(insertobj, (err) => {
if (err) throw err;
resolve();
})
})
},
//删
delete(Collection, whereobj, type) {
return new Promise((resolve, reject) => {
let deletetype = 'deleteOne';
type === 1 ? deletetype = 'deleteMany' : deletetype = 'deleteOne';
Collection[deletetype](whereobj, (err) => {
if (err) throw err;
resolve();
})
})
},
//改
update(Collection, whereobj, updateobj, type) {
return new Promise((resolve, reject) => {
let updatetype = 'updateOne';
type === 1 ? updatetype = 'updateMany' : updatetype = 'updateOne';
Collection[updatetype](whereobj, updateobj, (err) => {
if (err) throw err;
resolve();
})
})
},
//查
find(Collection, whereobj, showobj) {
return new Promise((resolve, reject) => {
Collection.find(whereobj, showobj).exec((err, data) => {
if (err) throw err;
resolve(data);
})
})
}
}
module.exports = sql;
5.3 测试数据库的增删改查
测试文件的封装,可立刻检查功能是否实现
插入功能测试文件insertdata.js
const sql=require('./sql');
const User=require('./sql/model/user');
sql.insert(User,{
username:'李四',
password:'222',
age:34,
tel:'13824586557'
}).then(()=>{
console.log('success');
sql.find(User,{},{}).then(data=>{
console.log(data);
})
})
删除功能测试文件deletedata.js
const sql=require('./sql');
const User=require('./user');
sql.delete(User,{username:'王富贵'}).then(()=>{
console.log('success');
sql.find(User,{},{}).then(data=>{
console.log(data)
})
})
修改功能测试文件updatedata.js
const sql=require('./sql');
const User=require('./sql/model/user');
sql.update(User,{username:'张夏'},{$set:{age:11}}).then(()=>{
console.log('success');
sql.find(User,{},{}).then(data =>{
console.log(data);
})
})
查询功能测试文件find.js
const sql = require('./sql');
const User = require('./sql/model/user');
sql.find(User,{},{}).then(data=>{
console.log(data);
})