mongoose添加属性问题
2024-09-02 22:00:32
在项目中遇到这样一个问题。
项目地址: https://github.com/ccyinghua/vue-node-mongodb-project/blob/master/07-shoppingCart.md
有一个good商品模型(models/goods.js)
var mongoose = require('mongoose');
var Schema = mongoose.Schema; // 定义一个Schema
var produtSchema = new Schema({
'productId':String, // 或者 'productId':{type:String}
'productName':String,
'salePrice':Number,
'productImage':String
}) // 输出(导出)
module.exports = mongoose.model('good',produtSchema);
还有一个user用户模型(models/users.js)
var mongoose = require('mongoose');
var Schema = mongoose.Schema; // 定义一个Schema
var userSchema = new Schema({
'userId':String, // 或者 'userId':{type:String}
'userName':String,
'userPwd':String,
'orderList':Array,
'cartList':[ // 购物车列表
{
"productId":String,
"productName":String,
"salePrice":Number,
"productImage":String,
"checked":String, // 是否选中
"productNum":String // 商品数量
}
],
"addressList":Array
}) // 输出(导出)
module.exports = mongoose.model('user',userSchema);
现需要根据good模型中根据商品id获取数据,然后添加到user的购物车列表中,实现加入购物车功能;
// 加入到购物车
var Goods = require('../models/goods');
var User = require('../models/users.js'); // 引入user模型
router.post("/addCart",function(req, res, next){
var userId = '100000077',
productId = req.body.productId; // post请求拿到res参数:req.body // 查询第一条:拿到用户信息
User.findOne({
userId:userId // 查询条件
},function(err,userDoc){
if(err){
res.json({
status:"1",
msg:err.message
})
}else{
console.log("userDoc"+userDoc); // 用户数据
if(userDoc){
let goodsItem = '';
userDoc.cartList.forEach(function(item){ // 遍历用户购物车,判断加入购物车的商品是否已经存在
if(item.productId == productId){
goodsItem = item;
item.productNum++; // 购物车这件商品数量+1
}
})
if(goodsItem){ // 若购物车商品已存在
userDoc.save(function (err2,doc2) {
if(err2){
res.json({
status:"1",
msg:err2.message
})
}else{
res.json({
status:'0',
msg:'',
result:'suc'
})
}
})
}else{ // 若购物车商品不存在,就添加进去
Goods.findOne({productId:productId},function(err1,doc){ // 从商品列表页Goods查询点击加入购物车的那件商品信息
if(err1){
res.json({
status:"1",
msg:err1.message
})
}else{
if(doc){
doc.productNum = 1;
doc.checked = 1;
userDoc.cartList.push(doc); // 添加信息到用户购物车列表中
userDoc.save(function(err2,doc2){ // 保存数据库
if(err2){
res.json({
status:"1",
msg:err2.message
})
}else{
res.json({
status:"0",
msg:'',
result:'suc'
})
}
})
}
}
})
}
}
}
})
})
在从mongodb的数据库的goods表根据商品id获取对应数据,再对此商品数据添加productNum和checked属性,之后再插入到users表的购物车列表中;发现users表的购物车列表添加的商品信息没有这两个属性。
解决办法一:
在good模型内添加属性是要在Schema添加这两个属性的;使用Mongoose取到的数据的结构是要依赖于定义的schema结构的。虽然我们给schema附加属性,但是这只是实现能真正挂在该schema上,并没有添加到schema中。
var mongoose = require('mongoose');
var Schema = mongoose.Schema; // 定义一个Schema
var produtSchema = new Schema({
'productId':String, // 或者 'productId':{type:String}
'productName':String,
'salePrice':Number,
'productImage':String, // 添加的属性
"checked":String,
"productNum":Number
}) // 输出(导出)
module.exports = mongoose.model('good',produtSchema);
解决办法二:
新建一个对象,对象包含商品信息,添加到购物车列表。
var obj = null;
if(doc){
obj = {
productId: doc.productId,
producName: doc.producName,
salePrice: doc.salePrice,
productName: doc.productName,
productImage: doc.productImage,
productNum: 1,
checked: "1"
}
userDoc.cartList.push(obj); // 添加信息到用户购物车列表中 userDoc.save(function(err2,doc2){ // 保存数据库
if(err2){
res.json({
status:"1",
msg:err2.message
})
}else{
res.json({
status:"0",
msg:'',
result:'suc'
})
}
})
}
最新文章
- UWP图片编辑器(涂鸦、裁剪、合成)
- 双系统先装Windows,后装linux的原因
- 读取XML的问题
- Asp.net项目因Session阻塞导致页面打开速度变慢
- Java 简介
- android studio添加三方jar包
- 多线程系列 线程池ThreadPool
- 一个【wchar_t】引发的学案
- mysql表名大小写问题
- mysql 加载文本数据
- JavaScript中函数参数的按值传递与按引用传递(即按地址传递)
- asp.net提高程序性能的技巧(一)
- Beta冲刺Day3
- Command `bundle` unrecognized. Make sure that you have run `npm install` and that you are inside a react-native project.
- 使用SpringBoot的优势。
- SpringMVC(十) RequestMapping RequestHeader注解
- devexpress 严重性 代码	说明	项目	文件	行	禁止显示状态 错误		“lc.exe”已退出,代码为 -1。
- Android中EditText显示明文与密码的两种方式
- Ajax分页(MVC下)(附源码,前后台)
- nginx的几种负载均衡策略