mongodb - 如何在我的 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 请求时,我没有收到错误,但是当我检查数据库时,数组值保持不变。对此的任何帮助都将是惊人的!
解决方案
您可以尝试quote.quote
使用简单的array#push将报价推送到,然后保存文档。
quote.quote.push(req.body.quote)
推荐阅读
- c++ - 如何在我的 Windows Toast 通知上方隐藏 AUMI 名称
- freeradius - 如何将freeradius 3.0.21与LDAP跳转云绑定
- bootstrap-table - 另一个扩展表中的引导表扩展
- python - 散景事件宣布一个按钮点击一个情节重做工具
- linux - 如何将 cmake 生成器设置回默认的 Unix Makefiles?
- ckeditor - CKEditor 5 - 添加后自动接受建议
- java - 使用 AWS Java SDK v2.x 的 Cognito SRP
- windows - 为什么 VBScript FileCopy 复制的文件显示为空?
- apache-spark - 为 Spark 作业和 Hadoop Yarn 调整内存配置
- javascript - 在 Python 中提交 HTML 表单并没有得到正确的响应