为什么不使用新余额更新商店单据? Node +猫鼬Express

时间:2019-07-08 02:41:20

标签: node.js mongodb express mongoose

下面的代码尝试将商店的 .balance 属性设置为10。调用该路线时,所有功能均正常运行,并且没有发生错误。

但是,在运行该功能并查看刚刚更新的商店之后。它的 .balance 属性仍然为0?为什么是这样?当我在其他地方使用此语法更新某些内容时,它起作用吗?

下面是代码。

app.get("/:id/deductBalance/:amount", async function(req, res){

    const id = req.params.id
    const amount = req.params.amount

    let updatedShop = {}
    let shop = await Shop.findById(id)
    let currentBal = shop.balance
    console.log(currentBal)

    updatedShop.balance = 10;

    Shop.updateOne({id: id}, updatedShop, async function(err){
        if(err){
            console.log(err)
        }
        else{
            console.log('changed shop bal')
        }
    })

    return res.redirect("/"+id+"/restockItems/option")
})

下面是商店的猫鼬模式

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var shopSchema = new Schema ({
    name: String,
    categories: Array,
    email: String,
    password: String,
    img: String,
    itemCategories: Array,
    manufacturers: Array,
    status: String,
    balance: Number
});


let Shop = module.exports = mongoose.model('Shop', shopSchema);

更新:在Shop.updateOne({id: id}部分中,id必须为_id,因为mongo中的ID前面带有_。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

尝试替换此部分:

Shop.updateOne({id: id}, updatedShop, async function(err){
    if(err){
        console.log(err)
    }
    else{
        console.log('changed shop bal')
    }
})

使用:

await Shop.updateOne({id: id}, updatedShop);