温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在node.js中使用mongoose对数据库进行操作

发布时间:2021-03-22 17:26:15 来源:亿速云 阅读:254 作者:Leah 栏目:web开发

本篇文章为大家展示了怎么在node.js中使用mongoose对数据库进行操作,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

1、数据库操作语句

Mongoose通过model实现对每个集合的操作,在使用前需要先定义model:goods。

①、增加数据:从集合中查询一条记录,并返回doc,对doc操作之后通过save()保存到集合

goods.findOne({productId},(err,goodsDoc)=>{    goodsDoc.productNum=1;    goodsDoc.save(err,doc); });

②、删除数据:

model.remove(conditions,callback(){})

③、修改数据:

model.update(conditions,updates,callback(){})

④、查询数据:

model.find(conditions,callback(){})

2、添加购物车

mongodb中新建用户user集合,user中有cartList数组,用户点击添加购物车时在前端发出post请求包括用户、商品的id。然后在后端查询到对应的用户,将其cartList中的商品id进行比对,如果在其中,则把商品数量+1,否则从商品集合中查询商品信息,插入到cartList数组中。

前端添加购物车请求:

  addCart(productId){//加入购物车    axios.post('./users/addCart',{     userId:"100000077",     productId:productId    }).then((response)=>{     let res=response.data;     console.log(res.msg);    });   }

后端处理:

var express = require('express'); var router = express.Router(); const mongoose=require('mongoose'); var user=require('../models/userModel'); var goods=require('../models/productModel'); //连接数据库 mongoose.connect('mongodb://localhost:27017/mall'); mongoose.connection.on('connected',()=>{  console.log("mongoDB连接成功"); }); //处理添加购物车请求 router.post('/addCart',(req,res,next)=>{  let userId=req.body.userId;  let productId=req.body.productId;  let params={   userId  };  user.findOne(params,(err,userDoc)=>{//查询对应用户信息   if (err){    res.json({     status:1,     msg:err.message    });   }else{    if(userDoc){     let inCart=false;     userDoc.cartList.forEach(function(item){//遍历cartList比对商品id      if (item.productId==productId){    //若商品在购物车内,数量增加       inCart=true;       item.productNum++;       saveDoc(userDoc,res);      }     });     //所选商品不在购物车内,则从商品列表内查找并添加到购物车     if(!inCart){      goods.findOne({productId},(err,goodsDoc)=>{       if(err){        res.json({         status:1,         msg:err.message        })       }else{        goodsDoc.checked=true;        goodsDoc.productNum=1;        userDoc.cartList.push(goodsDoc);//将商品插入到用户cartList数组内        console.log(userDoc.cartList);        saveDoc(userDoc,res);       }      });     }    }   }  }) });

利用doc.save将修改后的文档保存到数据库

function saveDoc(doc,res) {  //保存操作  doc.save((err,doc)=>{   if (err){    res.json({     status:1,     msg:err.message    })   }else {    res.json({     status:0,     msg:"添加购物车成功",     result:'success'    })   }  }) }

3、从购物车删除数据

前端点击删除按钮,调用deleteCart()发出post请求,删除成功重新加载购物车列表

   deleteCart(){     axios.post('users/deleteCart',{      productId:this.productId     }).then((response,err)=>{      let res=response.data;      if(res.status===0){       this.getCart();       this.modalShow=false;      }     })    },

后端获取到删除商品的id、用户的id,删除数据库中指定条目

router.post('/deleteCart',(req,res)=>{  "use strict";  let productId=req.body.productId;  let userId=req.cookies.userId;  user.update({userId:userId},{   $pull:{    cartList:{productId:productId}   }  },(err,doc)=>{   if(err){    res.json({     status:1,     msg:'数据库删除失败'    })   }else{    if(doc){     res.json({      status:0,      msg:'购物车删除成功'     })    }   }  }) });

4、修改购物车

前端对不同的按钮点击,实现购物车数量的增、减、选中的改变,调用editCart(opt,item),然后将修改的数据以post发送

editCart(flag,item){     if(flag==='check'){      item.checked=!item.checked;     }else if(flag==='add'){      item.productNum++;     }else if(flag==='sub'){      item.productNum<=0 ? item.productNum=0 : item.productNum++ ;     }     axios.post('users/editCart',{      productId:item.productId,      checked:item.checked,      productNum:item.productNum     }).then((response,err)=>{      let res=response.data;      if(res.status===0){       this.getCart();      }else{       console.log(res.msg);      }     }) }

后端接收要修改的数据,并对数据库进行更新:

router.post('/editCart',(req,res)=>{  "use strict";  let productId=req.body.productId;  let checked=req.body.checked;  let productNum=req.body.productNum;  let userId=req.cookies.userId;  user.update({userId:userId,'cartList.productId':productId},{   $set:{"cartList.$.checked":checked,"cartList.$.productNum":productNum}  },(err,doc)=>{   if(err){    res.json({     status:1,     msg:err.message    })   }else {    res.json({     status:0,     msg:'购物车更新成功'    })   }  }) });

5、查询购物车

前端发送查询购物车get请求,将结果数据赋予catList,页面遍历cartList渲染数据

   getCart(){     axios.get('users/getCart').then((response,err)=>{      let res=response.data;      if(res.status===0){       this.cartList=res.result.list;      }else{       console.log(res.msg);      }     })    },

后端根据用户的cookie,查询指定的用户的购物车

router.get('/getCart',(req,res)=>{  "use strict";  user.findOne({userId:req.cookies.userId},(err,doc)=>{   if(doc){    res.json({     status:0,     msg:'',     result:{      list:doc.cartList     }    })   }else{    res.json({     status:1,     msg:"购物车列表查询失败"    })   }  }) });

6、购物车的总价与全选

利用vue的计算属性可以实现属性的随时变化,计算属性只有在相关数据发送改变时才会随之改变,计算属性的实现像函数,但使用类似于一般属性,例如总价totalPrice与判断是否全部选中allSelected:

  computed:{    totalPrice(){     let total=0;     this.cartList.forEach((item)=>{      if(item.checked)       total+=parseFloat(item.salePrice)*parseInt(item.productNum);     });     return total;    },    allSelected(){     let selected=true;     this.cartList.forEach((item)=>{      selected=selected&&item.checked;     });     console.log(selected);     return selected;    }   },

上述内容就是怎么在node.js中使用mongoose对数据库进行操作,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI