gpt4 book ai didi

javascript - Mongoose 使用另一个字段的项目更新字段,即数组

转载 作者:行者123 更新时间:2023-12-04 07:42:14 25 4
gpt4 key购买 nike

我正在构建一个费用跟踪器应用程序,有一个用户集合,其中包含名称、金额、费用数组、收入数组等字段。

My Database Is Mongo Db with Mongoose and the Server Is Written In Express.


这是填充值后的数据库截图
MongoDB Database Screenshot
我正在尝试实现一条用户可以删除费用的路线,在删除费用后,我想更新余额并使余额 = 余额 + 费用。我可以删除和支出但无法更新余额,因为我不知道如何从已删除的支出中检索余额

这是删除路线:
router.delete("/", (req, res) => {
const { UserID, ExpenseID } = req.query;
const query = {
$pull: {
Expenses: { _id: ExpenseID },
},
};
User.findByIdAndUpdate(UserID, query)

});

我想添加一个 Mongoose 方法,它将从收到的费用 ID 中获取费用金额并将其存储在一个变量中,并且在费用被删除后,我想调用一个方法来更新用户在 Promise 中的余额。
这是我打算做的一个例子
// Deletes An Expense
router.delete("/", (req, res) => {
const { UserID, ExpenseID } = req.query;
const query = {
$pull: {
Expenses: { _id: ExpenseID },
},
};
User.find({/*Some Query Which Will Return me The Provided Expense ID's Amount*/})
User.findByIdAndUpdate(UserID, query)
.then(() => {
// Once I find and Remove the Expense, Now I would Like to Update the Users Balance
// NewBalance = OldBalance + Expense ID's Amount Returned by the Find Method
// Here I would Call another User.find method to update the Users Balance
})
});

假设从上面的数据库快照中,我想删除费用(从 0 开始)第一个对象元素,名称:Uber Fare,我将向服务器发送 6091f725403c2e1b8c18dda3 的对象 ID,并且应该期望我的余额从 48495 增加到49695

最佳答案

你可以做的是:

  • 使用 UserID 获取用户文档
  • 使用 ExpenseID 查找费用
  • 更新 Balance与费用金额
  • Expenses 中删除费用阵列
  • 保存用户文档
  • router.put("/", async (req, res) => {
    try {
    const { UserID, ExpenseID } = req.query;
    let user = await User.find({ _id: UserID });
    index = user.Expenses.findIndex((expense) => expense._id === ExpenseID);
    if (index != -1) {
    user.Balance += user.Expenses[index].Amount;
    user.Expenses.splice(index, 1);
    }
    await user.save();
    return res.status(200).json({ success: true, user: user });
    } catch (error) {
    return res.status(400).json({ success: false, error: error })
    }
    });
    注意 : 既然是更新文档,我配置了 put方法而不是 delete在路由器上。

    关于javascript - Mongoose 使用另一个字段的项目更新字段,即数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67394574/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com