首页 > 解决方案 > 如何在我的 Express 服务器中修复此更新方法以考虑 Mongoose 模式中的数组

问题描述

我正在用 express、mongodb 和 mongoose 构建一个 REST Api。作为我的架构的一部分,我已经说过我想要一个数组来保存一个值列表。我无法使用邮递员添加或更新数组中的值。我基本上想知道为什么这不起作用以及这种情况的最佳做法是什么。

这是我的猫鼬模式

const Schema = mongoose.Schema;

let Quote = new Schema({
    name: {
        type: String,
    },
    quote: [String],
    date_submitted: {
        type: Date,
        default: Date.now,
    },
});

module.exports = mongoose.model('Quote', Quote);

如前所述,我有一个数组设置来保存多个引号。

下面是向 mongoDB 添加引用的方法:

    let quote = new Quotes({
        name: req.body.name,
        quote: req.body,
    });
    quote
        .save()
        .then(quote => {
            res.status(200).send('adding new quote successful');
        })
        .catch(err => {
            res.status(400).send('adding new quote failed' + err);
        });
}); 

这确实向数据库添加了一条记录,但我不确定这种方法是否是最佳实践。

这是根本不起作用的更新方法

router.post('/update/:id', (req, res) => {
    // Quotes.findOneAndUpdate({ name: req.body.name }, { $push: { quote: req.body.quote } });
    Quotes.findById(req.params.id, function(err, quote) {
        if (!quote) {
            res.status(404).send('Data is not found');
        } else {
            quote.author = req.body.name;
            quote.quotes = { $push: { quote: req.body.quote } };
            quote.date_submitted = req.body.date_submitted;

            quote
                .save()
                .then(quote => {
                    res.json('quote updated');
                })
                .catch(err => {
                    res.status(400).send('Update not possible' + ' ' + err);
                });
        }
    });
});

您可以看到我尝试执行 findOneAndUpdate 方法,但它没有像应有的那样将值推送到数组中。当我从 Postman 提交我的 POST 请求时,我没有收到错误,但是当我检查数据库时,数组值保持不变。对此的任何帮助都将是惊人的!

标签: mongodbexpressmongoosemongoose-schema

解决方案


您可以尝试quote.quote使用简单的array#push将报价推送到,然后保存文档。 quote.quote.push(req.body.quote)


推荐阅读