mongoose添加屬性問題

在項目中遇到這樣一個問題。vue

項目地址: https://github.com/ccyinghua/vue-node-mongodb-project/blob/master/07-shoppingCart.mdnode

有一個good商品模型(models/goods.js)git

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)github

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的購物車列表中,實現加入購物車功能;mongodb

// 加入到購物車
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表的購物車列表添加的商品信息沒有這兩個屬性。數據庫

 

 解決辦法一:json

 在good模型內添加屬性是要在Schema添加這兩個屬性的;使用Mongoose取到的數據的結構是要依賴於定義的schema結構的。雖然咱們給schema附加屬性,可是這只是實現能真正掛在該schema上,並無添加到schema中。mongoose

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); 

 解決辦法二:post

新建一個對象,對象包含商品信息,添加到購物車列表。ui

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' }) } }) }

 

相關文章
相關標籤/搜索