我正在使用MEAN Stack和Angular 6开发Web应用程序。如果用户以前已将数据添加到db中,则应该更新数据。为此,我使用了findOneAndUpdate()
方法。 但不更新现有数据,它会将另一个数据集发布到数据库中。
这是我的发布路线。此“用户名”来自不同的架构。
router.post('/save', function(req, res) {
var mod = new rdaColor(req.body);
rdaColor.findOneAndUpdate(
{
userName: req.body.userName,
colorMovementBox: req.body.colorMovementBox
},
req.body,
{ upsert: true, new: true },
function(err, data) {
if (err) {
console.log(err);
res.send(err);
} else {
res.send(mod);
}
}
);
});
这是架构。
var mongoose = require('mongoose');
// Schema for rda color panel
var rdaColorSchema = new mongoose.Schema({
userName: {
type: String
},
colorMovementBox: {
type: String,
},
});
module.exports = mongoose.model('rdaColor', rdaColorSchema);
这是以下console.log的输出。
console.log("mod"+mod+" "+(req.body));
输出
mod{ _id: 5bbd68344619a612b07a688e,
userName: 'abc@yahoo.com',
colorMovementBox: 'rgb(49,64,116)',
} [object Object]
如何仅更新数据。
答案 0 :(得分:0)
请检查此查询。
如果数据中包含
Id
,它将更新;如果不存在,则创建新数据。如果您删除
upsert: true
,则它不创建新记录(如果不存在)。
rdaColor.findOneAndUpdate(
{ _id: "yourId" },
{
$set: {
userName: req.body.userName,
colorMovementBox: req.body.colorMovementBox
}
},
{ upsert: true, new: true },
function(err, doc) {
if (err) {
console.log("Something wrong when updating data!");
}
console.log(doc);
}
);