Mongoose для Nodejs Express: приведение к objectid не удалось для значения

У меня очень простая схема:

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

const userSchema = new Schema({
  'name': {type: String, required: true}
});

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

Я создаю новых пользователей и сохраняю их в базе данных следующим образом:

app.get('/profile/:name', (req, res) => {
  const newUser = new User({
    name: req.params.name
  });
  newUser.save((err) => {
    if (err) {
      res.send('Error: ' + err);
    }
  });
  res.redirect('/profile');
});

И затем я визуализирую «профиль» со всеми пользователями:

app.get('/profile',
  require('connect-ensure-login').ensureLoggedIn(),
  (req, res) => {
    User.find((err, allUsers) => {
      if (err) {
        res.send('Error: ' + err);
      } else if (allUsers.length === 0) {
        res.send('No users.');
      } else {
        res.render('profile', {user: req.user, allUsers: allUsers});
      }
    });
  });

Но я продолжаю получать следующую ошибку:

CastError: сбой преобразования в ObjectId для значения «10160168341815704» по пути «_id» для модели «Пользователь»

Я новичок в MongoDB и Express, поэтому буду благодарен за любую помощь! Спасибо.


person Khubaib Siddiqui    schedule 04.04.2018    source источник


Ответы (2)


Попробуйте добавить '{}' в качестве первого параметра в методе 'find':

User.find({}, (err, allUsers) => {
....
person Alberto Fecchi    schedule 04.04.2018
comment
Вы получаете эту ошибку во время рендеринга профиля, верно? - person Alberto Fecchi; 04.04.2018
comment
Попробуйте также очистить коллекцию User. Возможно, вы испортили в нем данные. - person Alberto Fecchi; 04.04.2018

Я предполагаю, что вы вставили значение _id вручную, поэтому мангуст жалуется на это, потому что он может преобразовать это значение в ObjectId.

В вашей оболочке mongo попробуйте:

$ db.user.find({ _id: {type: 'int'}})

или даже лучше

$ db.user.find({ _id: 10160168341815704 })

чтобы узнать, какой документ имеет это значение 10160168341815704, и удалите его.

Это должно решить вашу проблему.

person Arnold Gandarillas    schedule 04.04.2018