javascript - 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 }
解决方案
推荐阅读
- json-deserialization - AttributeError: 'list' 对象没有属性 'tolist'
- r - 从同一个文件中绘制多个散点图
- python - Python:给定一个二维数组,返回 True 是数组中的每个数字都是 2、0 和大于 2000 的幂。没有导入的库
- mysql - 使用 MySQL 生成时间表,卡在向表中插入记录
- r - 不能在函数中使用 $ 子集数据
- python - VSCode 术语“pyinstaller”未被识别为 cmdlet、函数的名称
- java - 在 Java 中的可运行对象中调用可运行对象时会发生什么?
- azure - 将 asp.net 应用程序持续部署到 Azure 规模集
- google-tasks - 是否可以向 Google Tasks 添加一些元信息?
- sql - 查询每个客户的订单总数和发送订单数(如果没有则返回0)