【问题标题】:How to update the row and unset some field如何更新行并取消设置某些字段
【发布时间】:2018-05-26 05:39:22
【问题描述】:

我有一个用户集合。

  • 名字。
  • 姓氏。
  • deactivatedAt.
  • deactivatedBy。
  • 状态(0:停用,1:启用)。

当用户处于活动状态时,deactivatedAt 和 deactivatedBy 应该从集合中移除。

当用户停用时,集合中应该可以使用 deactivatedAt 和 deactivatedBy

我执行以下操作。

1-> 当我停用用户时,我设置了 deactivatedAt 和 deactivatedBy

2-> 当我激活用户时,deactivatedAt 和 deactivatedBy 应该从集合中删除。

我的行动。

module.exports.deactive = function(req, res) {
  let userId = req.params.userId;
  let params = {
    status: 0,
    deactivatedAt: new Date(),
    deactivatedBy: {
      userId: req.payload._id,
      firstName: req.payload.firstName,
      lastName: req.payload.lastName
    }
  };
  User.findByIdAndUpdate(userId, params, {new: true})
    .then(result => {
      sendJsonResponse(res, 200, {message: 'User successfully deactivated'});
    })
    .catch(err => {
      sendJsonResponse(res, 500, {message: 'Error occurred'});
    })
};

module.exports.active = function(req, res) {
  let userId = req.params.userId;
  let params = {
    status: 1
  };


  //------------ in here in need to remove the deactivatedAt and deactivated By


  User.findByIdAndUpdate(userId, params)
    .then(result => {
      sendJsonResponse(res, 200, {message: 'User successfully activated'});
    })
    .catch(err => {
      sendJsonResponse(res, 500, {message: 'Error occurred'});
    })
};

提前致谢。

【问题讨论】:

  • 您可以使用 $unset of mongo 来处理这种情况,请查看here的更多信息

标签: mongodb mongoose


【解决方案1】:

我认为你应该在 update() 中使用 $unset 从集合中删除字段

let params = { 
     $unset : {
          deactivatedAt : 1,
          deactivatedBy : 1
     }
};
User.update({_id : user_id}, params)
.then(result => {
    sendJsonResponse(res, 200, {message: 'User successfully activated'});
})
.catch(err => {
    sendJsonResponse(res, 500, {message: 'Error occurred'});
});

当用户不活跃时,您可以再次使用 $set

设置值
let params = { 
     $set : {
          deactivatedAt : <value>,
          deactivatedBy : <value>
     }
};
User.update({_id : user_id}, params)
.then(result => {
    sendJsonResponse(res, 200, {message: 'User successfully deactivated'});
})
.catch(err => {
    sendJsonResponse(res, 500, {message: 'Error occurred'});
});

我希望这会对你有所帮助。谢谢。

【讨论】:

  • 同时,如何设置?
  • 您可以使用 $set 和 update() 再次设置值。我对答案进行了更改。还是您编写的停用代码工作正常?
  • 不能同时使用$set和$unset吗?
  • 可以同时使用$set和$unset。参考这个stackoverflow.com/questions/17760741/…
猜你喜欢
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多