mongoose添加屬性問題


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

項目地址: 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' }) } }) }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM