一.Mongoose的介绍
Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具.
在项目安装mongoose封装 :cnpm install mongoose --save
二.Mongoose常用语法
1.加载Mongoose模块
var mongoose = require('mongoose');
2.连接数据库
(1).connect()
mongoose.connect(uri(s), [options], [options.useMongoClient], [callback])
//引用mongoose const mongoose = require('mongoose') const URL = 'mongodb://localhost:27017/shop'; mongoose.connect(URL,function(err){ if(err){ console.log('数据库连接失败:'+err); }else { console.log('数据库成功连接到:'+ URL); } });
shop是数据库的集合 (这个项目的的数据库名)
(2).createConnection()
此方法获取数据库连接,操作database层面,返回一个Connection对象。Connection对象中包含model,collection,dropDatabase等操作数据库的方法,也包含connected,disconnected,error等事件触发方法。
const mongoose = require('mongoose') const URL = 'mongodb://localhost:27017/shop'; //实际上只是创建了一个Connection对象,能够操作数据库,但是不能操作具体的document var db = mongoose.createConnection(URL); db.on('connected',function(err){ if(err){ console.log('连接数据库失败:'+err); }else{ console.log('连接数据库成功!'); } })
(3).connection
connection是mongoose模块的默认引用,返回一个Connetion对象点击打开链接。因为connect()方法并不能监听数据库连接情况,所以,一般情况下此方法跟connet()方法搭配使用:
const mongoose = require('mongoose') const URL = 'mongodb://localhost:27017/shop'; mongoose.connect(URL); var db = mongoose.connection;//获取connection实例 //使用Connetion监听连接状态 db.on('connected',function(err){ if(err){ console.log('连接数据库失败:'+err); }else{ console.log('连接数据库成功!'); } });
参考:mongoose中connect()、createConnection()和connection的区别和作用
3.数据连接成功 定义Schema表模型
比如goods商品表
var produtSchema = new Schema({ "productId":String,//定义一个字段productId,类型为String "productName":String, "prodcutPrice":Number, "prodcutImg":String }); 或是 var produtSchema = new Schema({ "productId":{type: String, 'require': true}, "productName":{type: String, 'require': false}, "prodcutPrice":{type: Number, 'require': false}, "prodcutImg":{type: String, 'require':false}, }); //通过mongoose的model把goods模块输出 //good表名 它会自动找到good并加s module.exports = mongoose.model('Good',produtSchema);
"productId":String,//定义一个字段productId,类型为String
"productName":String,
"prodcutPrice":Number,
"prodcutImg":String
});
或是
var produtSchema = new Schema({
"productId":{type: String, 'require': true},
"productName":{type: String, 'require': false},
"prodcutPrice":{type: Number, 'require': false},
"prodcutImg":{type: String, 'require':false},
});
//通过mongoose的model把goods模块输出 //good表名 它会自动找到good并加s
module.exports = mongoose.model('Good',produtSchema);
类型:String Number Date Buffer Boolean Mixed Objectid Array index :建索引 default:默认值
4.常用数据库操作
(1).查找数据find()
a.这是查找所有数据
查询mongoDB的goods数据 var Goods = require('../models/goods'); Goods.find({},function(err,doc){ if(err){ res.json({ status:'1', msg:err.message }) }else{ res.json({ status:'0', msg:'', result:{ count:doc.length, list:doc } }) }
分页查找以及排序
查询mongoDB的goods数据 var Goods = require('../models/goods'); let currentPage = parseInt(req.param("page"));//当前是第几页 let pageSize = parseInt(req.param("pageSize"));//一页多少数据 let sort = req.param("sort");//排序 let skipNum = (currentPage-1)* pageSize;//跳过几条数据 let params = {}; let goodsModel = Goods.find(params).skip(skipNum).limit(pageSize).sort({'prodcutPrice':1});//find()查找数据 goodsModel.exec(function(err,doc){ if(err){ res.json({ status:'1', msg:err.message }) }else{ res.json({ status:'0', msg:'', result:{ count:doc.length, list:doc } }) } })
c.按照id查找
查询mongoDB的goods数据 var Goods = require('../models/goods'); var id = '5b20bee91e440d036027d320'; Goods.findById(id, function(err,doc){ if(err){ res.json({ status:'1', msg:err.message }) }else{ res.json({ status:'0', msg:'', result:{ count:doc.length, list:doc } }) } })
d.模糊查找 产品名字带6的
查询mongoDB的goods数据 var Goods = require('../models/goods'); var whereStr = {'productName':{$regex:/6/i}}; Goods.find(whereStr, function(err,doc){ if(err){ res.json({ status:'1', msg:err.message }) }else{ res.json({ status:'0', msg:'', result:{ count:doc.length, list:doc } }) } })
(2).增加数据
a.方式通过mongobooster可视化工具执行语句
db.goods.insert({"productId":"10001","productName":"小米6","prodcutPrice":2499,"prodcutImg":"mi6.jpg"})
b.express框架的router/goods.js
var Goods = require('../models/goods'); let mo = new Goods({ "productId":"10011", "productName":"小米11", "prodcutPrice":4000, "prodcutImg":"10.jpg" }); mo.save({}, (err, doc)=> { if (err) { console.log(err); }else { console.log(doc); } });
c.用mongose的语法创建
//类似于mysql的表,mongo里面表结构,字段的创建(user表名,Schema里面是字段) const User = mongoose.model('user',new mongoose.Schema({ username:{type:String,require:true}, nickname:{type:String,require:false}, age:{type:Number,require:true} })) //新增数据 User.create({ username:'小高', nickname:'nini', age:20 },function(err,doc){ if(!err){ console.log(doc) }else{ console.log(err) } })
(3).修改/更新 数据
a.findByIdAndUpdate,这种比较有指定性,就是根据_id
var Goods = require('../models/goods'); var id = '5b20c5296bfe282a48380f3e'; var updatestr = {'productName': '原名小米11搞成小米6'}; Goods.findByIdAndUpdate(id, updatestr, function(err, res){ if (err) { console.log("Error"); } else { console.log("修改成功"); } })
b.update()修改方法
var Goods = require('../models/goods'); var wherestr = {'productName' : '原名小米11搞成小米6'}; var updatestr = {'prodcutPrice':5674}; Goods.update(wherestr, updatestr, function(err, res){ if (err) { console.log("Error"); } else { console.log("修改成功"); } })
User.update({条件},{'$set':{修改的内容}},function(err,doc){})
User.update({'username':'小高'},{'$set':{age:25}},function(err,doc){ if(!err){ console.log(doc) } })
更新子文档 $:代表数组的下标,例如只更新cartList数组中满足条件的元素
router.post("/carEdit",function(req,res,next){ var userId = req.cookies.userId; var productId = req.body.productId; var productNum = req.body.productNum; var checked = req.body.checked; User.update({ //这个是查询的条件 userId:userId, "cartList.productId":productId },{//更新子文档 $:代表数组的下标,例如只更新cartList数组中满足条件的元素 "cartList.$.productNum":productNum, "cartList.$.checked":checked },function(err,doc){ if(err){ res.json({ status:"1", msg:err.message }) }else{ if(doc){ res.json({ status:"0", msg:"", result:'更新成功' }) } } }) })
其它更新方法
Model.findOneAndUpdate([conditions], [update], [options], [callback]) //找到一条记录并更新
(4).删除数据
var Goods = require('../models/goods'); var wherestr = {'productName' : '原名小米11搞成小米6'}; Goods.remove(wherestr,function(err, res){ if (err) { console.log("Error"); } else { console.log("删除成功"); } })
User.update({//这个是查询的条件},{ $pull:删除指定数据,例如对指定userId下的cartList数组删除其中指定的productId
$pull:{'cartList':{'productId':productId}}}
//购物车删除 router.post("/carDel",function(req,res,next){ var userId = req.cookies.userId; var productId = req.body.productId; User.update({ //这个是查询的条件 userId:userId },{//删除条件 $pull:删除指定数据,例如对指定userId下的cartList数组删除其中指定的productId的元素 $pull:{ 'cartList':{ 'productId':productId } } },function(err,doc){ if(err){ res.json({ status:"1", msg:err.message }) }else{ if(doc){ res.json({ status:"0", msg:"", result:'删除成功' }) } } }) })
其它常用方法还有:
Model.findByIdAndRemove(id, [options], [callback])
Model.findOneAndRemove(conditions, [options], [callback])
参考例子1.基于vue2+node+express+mongoDB 获取商量列表查询接口
文档地址:https://mongoose.shujuwajue.com/guide/plugins.html
参考文章:https://www.cnblogs.com/xiaohuochai/p/7215067.html?utm_source=itdadao&utm_medium=referral
发表评论
侧栏公告
寄语
譬如朝露博客是一个分享前端知识的网站,联系方式11523518。
热评文章
标签列表
热门文章
友情链接