I am pretty new to node.js and building an billing web app. But in the Add Bill section, I can not able to insert the calculated total price to the database. I need to calculate the value of price after clicking submit button and then insert the value along with other values to the database. Even though my calculation is right, I am always getting value '0' in the DB under price.
Here is my code.
This is my bill schema
var bill = new Schema({
name:{type: String, required: [true, '{PATH} is required']},
cname: {type: String, required: [true, '{PATH} is required']},
address: {type: String, required: [true, '{PATH} is required'] },
city: {type: String, required: [true, '{PATH} is required'] },
postal: {type: Number, min: [0, 'Can not be a negetive value'], required: [true, '{PATH} is required']},
mobile: {type: Number, min: [0, 'Can not be a negetive value'], required: [true, '{PATH} is required']},
email: {type: String, required: [true, '{PATH} is required'] },
date: {type: Date, required: [true, '{PATH} is required'] },
product: {type: String, required: [true, '{PATH} is required'] },
//quantity: {type: Number, min: [0, 'Can not be a negetive value'] },
CGST: {type: Array},
SGST: {type: Array},
price: {type: Number}
});
This is in the route.js for send the request to controller.
router.post('/addbill', indexController.saveBill);
This in the controller.
saveBill: function(request, response) {
    var loginUser = request.session.user;
        var arr = [];
        var cgst = [];
        var sgst = [];
        var price = 0;
        arr = request.body.product;
        for(var i = 0; i<arr.length; i++){
            var query = Product.findOne({ pname: arr[i] });
            query.select('sell CGST SGST');
            query.exec(function (err, product){
                var tempPrice = product.sell;
                tempPrice = tempPrice + ((tempPrice * (product.CGST + product.SGST)) / 100);
                price = price + tempPrice;
                cgst[i] = product.CGST;
                sgst[i] = product.SGST;
                if (err) return handleError(err);
                console.log(price);// This printing the right results
            });
        }
        console.log("The Final Price: " + price);// 0
        console.log("The CGST: " + cgst);// Blank
        console.log("The SGST: " + sgst);// Blank
        var bill = new Bill({
            name: request.body.name,
            cname: request.body.cname,
            address: request.body.address,
            city: request.body.city,
            postal: request.body.postal,
            mobile: request.body.mobile,
            email: request.body.email,
            date: request.body.date,
            product: request.body.product,
            price: price,
            CGST: cgst,
            SGST: sgst
        });
        var error = bill.validateSync();
        if (error) {
            console.log(error);
            response.render('dashboard', {message: error, successMessage: '', userLoggedIn: loginUser});
        } else {
            bill.save(function (err) {
                console.log("Price from DB: " + bill.price);// 0
                if (err) {
                    // response.render('addemp', {message: 'OOPS something went wrong !!! Please try again', user: loginUser});
                    response.render('dashboard', {message: err, successMessage: '', userLoggedIn: loginUser});
                } else {
                    //response.redirect('/addemp');
                    response.render('dashboard', {successMessage: 'New Bill is successfully generated.', message: '', userLoggedIn: loginUser});
                }
            });
        }
}
Here is the json file from Database
{
"_id": {
    "$oid": "5ae591d36e2c9d1c39f159a9"
},
"CGST": [],
"SGST": [],
"name": "Ayan Das",
"cname": "Alliance Broadband",
"address": "15, Bidyayatan Sarani",
"city": "Kolkata",
"postal": 700035,
"mobile": 7003247631,
"email": "kenny.s@gmail.com",
"date": {
    "$date": "2018-04-29T00:00:00.000Z"
},
"product": "Redmi note 5 (black, 64Gb),Honor 9 Lite (Sapphire Blue, 32 GB)  (3 GB RAM),ACER ASPIRE V5-471p",
"price": 0,
"__v": 0
}
I think i'm missing something which i need to do in order to make it work. Mongoose documentation is kind of overwhelming for me, I did try some things from there but not working. Little help will be very helpful.
