首页 > 解决方案 > Mongoose and Express - FindbyIdandUpdate 覆盖第一个数组的值

问题描述

我正在创建一个用于订购食物的快餐在线服务(我只是在练习)。现在困扰我的事情是,当客户挑餐时,我已经成功创建了订单。选择另一餐后,订单由 order.id 更新,并使用 $push 将另一餐添加到同一订单中。我遇到的问题是,当第一次创建订单时,第一餐在添加第二餐时被 findbyIdAndUpdate 覆盖。添加第三餐后,我从第二餐和第三餐中获取数据,但第一餐不存在。我正在使用 MongoDB。有人可以告诉我如何解决这个问题吗?

抱歉,提前记录了日志,可能是错误的代码!

订单模式在这里:

var mongoose = require("mongoose");

var orderSchema = new mongoose.Schema({
    order: [{
        meal: {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'Menu'
        },
        quantity: String
    }],
    user: {
        type: mongoose.Schema.Types.ObjectId,
        ref: "User",

    }



});

module.exports = mongoose.model("Order", orderSchema);

特快路线在这里:

app.post("/menu/order", middlewareObject.isLoggedin, function (req, res) {
    let order = {
        user: req.user._id,
        meal: req.body.foodID,
        quantity: req.body.quantity,

    }
    if (app.locals.orderID !== undefined) {
        order._id = app.locals.orderID;
        console.log(order._id);
        Order.findByIdAndUpdate(order._id, {
            $push: {
                order: {
                    meal: order.meal,
                    quantity: order.quantity,

                }
            }
        }, function (err, updated) {
            if (err) {
                console.log(err);
            } else {
                console.log("UPDATED!")
                res.redirect("back");
            }
        })
    } else {
        Order.create(order, function (err, newOrder) {
            if (err) {
                console.log(err)
            } else {
                console.log("CREATED!")
                app.locals.orderID = newOrder._id;
                res.redirect("back");
            }
        })
    }

})

创建()数据:

{ "_id" : ObjectId("5eb6b78bd336a7324c63621c"), "user" : ObjectId("5eb6b788d336a7324c63621a"), "order" : [ ], "__v" : 0 }

FindByUpdateandID 数据:

{ "_id" : ObjectId("5eb6ba776d8684455cb8ece5"), "user" : ObjectId("5eb6b788d336a7324c63621a"), "order" : [ { "_id" : ObjectId("5eb6ba7d6d8684455cb8ece6"), "meal" : ObjectId("5eb6ba6a6d8684455cb8ecd7"), "quantity" : "5" }, { "_id" : ObjectId("5eb6ba7f6d8684455cb8ece7"), "meal" : ObjectId("5eb6ba6a6d8684455cb8ecd8"), "quantity" : "2" } ], "__v" : 0 }

标签: javascriptmongodbexpressmongoose

解决方案


推荐阅读