我正在构建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`})
答案 0 :(得分:0)
您可以执行以下操作。只需将所有要更新的值传递到对象中即可。
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;
}