Пн goose / MongoDB Выполнение обновления по пути \ '_ id \' приведет к изменению неизменяемого поля \ '_ id \' - PullRequest
0 голосов
/ 26 марта 2020

Привет, я пытаюсь добавить функцию обновления для моего SPA и, похоже, сталкиваюсь с этой проблемой.

blogsRouter.put('/:id', (request, response) => {

const body = request.body

const blog = Blog ({
  title: body.title,
  author: body.author,
  url: body.url,
  likes: body.likes,
  userId: body.userId,
  userName: body.userName
})

Blog.findByIdAndUpdate(request.params.id, blog)
  .then(updatedBlog => {
    response.json(updatedBlog.toJSON())
  })
.catch(error => console.log(error))
})

она ловит эту ошибку

Performing an update on the path '_id' would modify the immutable field '_id'

Я не уверен, что здесь происходит, так как, насколько я понимаю, я не пытаюсь обновить поле и если мой подход пытается сделать это автоматически, что будет лучшим способом сделать это?

1 Ответ

0 голосов
/ 26 марта 2020

Поскольку вы передаете полную модель Mon goose в качестве обновления.

Вы используете const blog = Blog({ ... }), это создает полную модель Mon goose с автоматическим c _id.

Этот объект передается как обновление. Поскольку он имеет собственный _id, обновление отклонено, поскольку _id является неизменным полем.

Решение: передайте простой объект в качестве обновления, а не полную модель Mon goose.

blogsRouter.put('/:id', (request, response) => {

const body = request.body

const blog = { // <-- Here
  title: body.title,
  author: body.author,
  url: body.url,
  likes: body.likes,
  userId: body.userId,
  userName: body.userName
}

Blog.findByIdAndUpdate(request.params.id, blog)
  .then(updatedBlog => {
    response.json(updatedBlog.toJSON())
  })
.catch(error => console.log(error))
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...