【问题标题】:How to update only specific field in object within an array Mongodb如何仅更新数组Mongodb中对象中的特定字段
【发布时间】:2022-01-09 03:55:57
【问题描述】:

Expense Tracker 应用程序:Nodejs、Mongodb

尝试创建一个仅更新对象数组中请求中传递的字段的函数

数据库架构

const updateExpense = async (req, res) => {
try {
    let db = mongo.getDb()
    let { macro, micro, amount, note } = req.body;
    let { username, id } = req.query
    let expense = await db.collection("Expense").updateOne({ username: username, "expenses.expense_id": ObjectId(id) }, { $set: { 
        "expenses.$.macro": macro,
        "expenses.$.micro": micro,
        "expenses.$.amount": amount,
        "expenses.$.note": note }
     });
    res.status(200).json({
        message: "Expense Updated",
        expense: expense
    });
} catch (err) {
    res.status(500).json({
        message: err.message
    });
}
}

上述函数将所有其他字段替换为 null

如果用户只传递了微字段,那么其他字段应该保持不变,只有微字段应该改变,其他字段不应该改变。

需要一个 MongoDB 查询,它只会根据 req 中传递的数据更改所需内容

【问题讨论】:

    标签: node.js mongodb express


    【解决方案1】:

    我认为您必须首先使用findOne 从数据库中获取,然后更新在req.body 中设置的字段,如下所示:

    
    const updateExpense = async (req, res) => {
    try {
        let db = mongo.getDb()
        let { macro, micro, amount, note } = req.body;
        let { username, id } = req.query
        let expense = await db.collection("Expense").findOne({ username: username });
        let special_ex = expense.expenses.find(ex => ex.expense_id === ObjectId(id);
        special_ex.macro = macro ? macro : special_ex.macro;
        special_ex.micro = micro ? micro : special_ex.micro;
    
    /*
        and so on ...
    */    
    
        await expense.update();
    
        res.status(200).json({
            message: "Expense Updated",
            expense: expense
        });
    } catch (err) {
        res.status(500).json({
            message: err.message
        });
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      • 2017-12-16
      • 2020-07-04
      • 2019-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多