[英]How to update MongoDB document only when data changed?
我正在构建CRUD应用程序的后端。 我目前有一个用于/diagrams/update:id
的POST路由设置,我可以使用Postman发送的正文文本覆盖MongoDB文档。
我可以成功更新文档,但是当我尝试更新文档中的一个数据时,其他所有内容都会被删除。
我希望我的代码1)检测我尝试更改的内容是否与数据库中的数据不同,2)仅当它不同时,更新记录,3)如果没有更改,请不要更新并保留数据库中的当前数据。
我试着做点什么
if (diagram.name !== req.body.name) {
diagram.name = req.body.name}
但那意味着我必须为每一次改变都写出那个逻辑。
server.js
router.route('/diagrams/update/:id').post((req, res)=> {
mySchema.findById(req.params.id, (err, diagram) => {
if (!diagram)
return next(new Error('Could not load doc!'))
else {
// I tried something like
// if (diagram.name !== req.body.name) {
// diagram.name = req.body.name}
// but that only works one at a time
diagram.name = req.body.name;
diagram.creator = req.body.creator;
diagram.customer = req.body.customer;
diagram.save().then( diagram => {
res.json('Update done!')
}).catch(err => {
res.status(400).send('Update faileddddd')
})
}
})
})
MySchema.js
const mongoose = require( 'mongoose');
const Schema = mongoose.Schema;
let mySchema = new Schema({
name: {
type: String
},
creator: {
type: String
},
customer: {
type: String
}
}, {collection: `fivo`})
你可以做这样的事情。 只需传递要在对象中更新的所有值。
let update = async (userId, properties) => {
let user = await Users.findOne({ _id: userId });
// Update all properties.
for(property in properties) {
user[property] = properties[property];
}
user = await user.save();
return user;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.