我已经开发了一个普通的堆栈应用程序。我正在尝试使用Date字段的空值更新记录。这在我的本地主机上工作正常,但在我的服务器(Aws Ec2)上却无法正常工作。它包含更新前的先前值。
我也尝试过'undefined',但还是一样。
router.put('/editAssign/:id',(req,res)=>{
if(!ObjectId.isValid(req.params.id))
return res.status(400).send('No record with given id : $(req.params.id)');
var assignment = {
name: req.body.name,
code: req.body.code,
appointmentTime: req.body.appointmentTime,
scheduledTime:req.body.scheduledTime,
countEndTime: null
};
Assignment.findOneAndUpdate(req.params.id,{$set:assignment},{new:true},(err,doc)=>{
if(!err)
res.send(doc);
else
console.log('Error in Assignment Update: '+JSON.stringify(err,undefined,2));
});
});
我希望它也可以在我的服务器上工作。
答案 0 :(得分:1)
当用户使用Mongoose登录时,我已经做了类似的事情来更新用户的最后登录日期。
const authUser: any = await new Promise((res, rej) => {
User.findOneAndUpdate({ _id: user[0]._id }, { last_login: date }, {new: true}, (err: any, user:any) => {
if (err) rej(err);
res(user);
});
});
如您所见,我将其包装在一个Promise中,以便我可以等待响应发送回去。
从您的角度来看,我好像您不是在告诉它要使用findByIdAndUpdate
而不是findOneAndUpdate
,因为您只是传递ID。因此更新后的外观应如下所示。
Assignment.findByIdAndUpdate(req.params.id, assignment, {new:true}, (err,doc)=>{
if(err) console.log('Error in Assignment Update: '+JSON.stringify(err,undefined,2));
return res.send(doc);
});
因此,在上面的代码中,我们传递了findByIdAnyUpdate
的ID,而我们只是传递了赋值。如果它包含与架构相同的所有字段,它将仅使用最新字段进行更新。
编辑:
您可以尝试的另一种方法是:
Assignment.findByIdAndUpdate(req.params.id, assignment, {new: true}, (err: any, result: any) => {
if(err) console.log('Error in Assignment Update: '+JSON.stringify(err,undefined,2));
// Reasign with new assignment and save
result = assignment;
result.save();
return res.send(result);
});