【问题标题】:I want to update user profile我想更新用户资料
【发布时间】:2019-10-24 20:21:52
【问题描述】:

我只想更新那些我传递给其他数据的键应该保持不变的字段,但在我的情况下,我传递的那些改变其他数据的键设置为null

import userModel from '../../models/usermodel'
import {Request,Response} from 'express'
import jwt from 'jsonwebtoken'

const editprofile = (req:Request,res:Response)=>{

    let newData = new userModel(req.body)

    const userObj = {
        email: req.body.email || null,
        first_name: req.body.first_name || null,
        last_name: req.body.last_name || null,
        dob: req.body.dob || null,
        phone: req.body.phone || null,
        gender: req.body.gender || null,
        // profile_img: req.file.filename || null
    };

    userModel.findByIdAndUpdate({'_id':req.body._id}, { $set: userObj }, { upsert: true, new: true })

    .then(result=>{
        res.status(200).json({success:true,message:"Profile Updated",customer:result})
        console.log('result',result)
    })
    .catch(err=>{
        res.status(404).json({success:false,message:"Something went wrong",error_message:err})
    })
}
export default editprofile

【问题讨论】:

标签: node.js mongodb typescript mongoose


【解决方案1】:

您可以使用循环来填充给定的字段:

  let newObj = {};
    Object.keys(req.body).forEach(function(prop) {
        newObj[prop] = req.body[prop];
    });

使用 findOne() 获取记录字段:

  let query = { $set: {} };
  for (let key in req.body) {
    if (customer[key] && customer[key] !== req.body[key])// if the field we have in req.body exists, we're gonna update it
      query.$set[key] = req.body[key];
  }

【讨论】:

    【解决方案2】:

    如果您想更新一个或多个key 字段,那么您应该只发送您想更新的键值对。

    在您的代码中,您发送的是查询中的总对象。

    因此,如果您想更新 first_namelast_name,请仅发送 first_namelast_name

    const userObj = {
            first_name: req.body.first_name,
            last_name: req.body.last_name
     };
    userModel.findByIdAndUpdate({'_id':req.body._id}, { $set: userObj }, { upsert: true, new: true }
    );
    

    这不会更新其他值。

    您还可以在更新前删除null 值键,这样它就不会替换原始数据。

    【讨论】:

    • 不,我只想更新那些我已经通过了键的值。
    • 是的,一个或多个相同,只发送您要更新的字段。
    • 我认为您不了解我正在制作网站,而他应该更新哪些值取决于用户
    • 是的,但是API在你手中,你的代码需要了解他要编辑的内容,并且只更新数据库中的那个字段,而不是全部。因为查询不会那样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多