发送空值时,mongodb中的日期字段无法更新

时间:2019-01-03 08:41:47

标签: node.js angular mongodb mongoose

我已经开发了一个普通的堆栈应用程序。我正在尝试使用Date字段的空值更新记录。这在我的本地主机上工作正常,但在我的服务器(Aws Ec2)上却无法正常工作。它包含更新前的先前值。

我也尝试过'undefined',但还是一样。

访问mongodb set null in update

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));
    });
});

我希望它也可以在我的服务器上工作。

1 个答案:

答案 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);
});