【问题标题】:Mongoose findByIdAndUpdate doesnt update my mongoDB猫鼬 findByIdAndUpdate 不更新我的 mongoDB
【发布时间】:2019-09-10 15:16:01
【问题描述】:

你好,我是 nodejs 和 mongoose 的新手。 我在我的网络应用程序上工作,我试图让猫鼬 findByIdAndUpdate 不更新我的 mongoDB,我做错了什么? 我正在尝试更新令人兴奋的用户详细信息。

我尝试了很多解决方案来解决这个问题,比如很多查询,但没有一个有效。 我正在向邮递员发出帖子请求,试图更改此字段: 名 姓 用户名 电子邮件 电话 到路线: http://localhost:5000/api/users/5cbb60157b07f13ec88070c4

但我总是得到旧用户而不是更新用户作为响应

api/users :
const express = require('express');
const router = express.Router();
const User = require('../../models/User');
const bcrypt = require('bcryptjs');
const validateCreateUserInput = require('../../validation/createUser');
const passport = require('passport');

router.post('/:id', passport.authenticate('jwt', { session: false }), (req, res) => {
  const userDetails = {};
  if (req.body.firstName) userDetails.firstName = req.body.firstName;
  if (req.body.lastName) userDetails.lastName = req.body.lastName;
  if (req.body.username) userDetails.username = req.body.username;
  if (req.body.email) userDetails.email = req.body.email;
  if (req.body.phone) userDetails.phone = req.body.phone;
  User.findByIdAndUpdate(
    { _id: req.params.id },
    { new: true },
    { $set: userDetails })
    .then(user => {
      res.json(user)
    })
    .catch(err => console.log(err));
})

module.exports = router;

用户模型:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const UserSchema = new Schema({
  firstName: {
    type: String,
    required: true
  },
  lastName: {
    type: String,
    required: true
  },
  username: {
    type: String,
    required: true
  },
  password: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true
  },
  phone: {
    type: String,
    required: true
  },
  createdAt: {
    type: Date,
    default: Date.now
  },
  updatedAt: {
    type: Date,
    default: Date.now
  }
})

module.exports = User = mongoose.model('users', UserSchema);

我希望 mongoDB 中的数据会发生变化

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

    如果您按以下方式更改代码,它将起作用。 Mongodb Shell操作中使用的“$set”语句不与“Mongoose”一起使用。

     User.findByIdAndUpdate(
      { _id: req.params.id },
      userDetails,
      { new: true })
     .then(user => {
      res.json(user)
      })
     .catch(err => console.log(err));
      })
    

    【讨论】:

      【解决方案2】:

      您可以在使用 $set 时使用 'update' 方法。 示例:

      User.update({
      _id: Schema.Types.ObjectId(req.params.id)
      },{
      Key: value
      })
      

      【讨论】:

        猜你喜欢
        • 2020-09-06
        • 1970-01-01
        • 2023-03-03
        • 2017-01-16
        • 1970-01-01
        • 2017-02-10
        • 1970-01-01
        • 2020-09-05
        • 2022-07-21
        相关资源
        最近更新 更多