Коллекция Async / await Mongoose, почему моя коллекция сообщений не создается?

#node.js #mongoose

#node.js #mongoose

Вопрос:

Я объясню, что я пробовал с этим кодом

 mongoose.connect('mongodb://localhost/postdb', {
    useNewUrlParser: true,
    useUnifiedTopology: true,
  }).then(() => console.log('Successfully connect to MongoDB.'))
  .catch((err) => console.error('Connection error', err));

 
  async function createPost() {
    try {
      const jean = await User.create({
        username : 'Jean', email: 'jtigana@aol.com',
      });
      const c1 = await Comment.create({postedBy : jean, body: 'Enfent terrible' });
      await Post.create({title: 'Vou comer voce! ',
        body: 'What a wonderful life!',
        postedBy: jean,
        comments: c1,
      });
    } catch (err) {
      console.log(err);
    }
  }

  createPost();
  

Моя PostSchema

 const PostSchema = new mongoose.Schema({
  title: String,
  body: String,
  createdAt: {
    type: Date,
    default: Date.now,
  },
  postedBy: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User',
  },
  comments: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Comment',
  }] 
});
  

Я ожидал 3 коллекции, идея в том, что позже другие пользователи смогут добавлять комментарии в тот же пост. MongoDB compass
введите описание изображения здесь

Я запускаю свой код с терминала

 node --trace-warnings --unhandled-rejections=strict index.js
  

Блок Try / catch не жалуется. Почему отсутствует третья коллекция?

Ответ №1:

Вы указали postedBy и комментарии в качестве идентификатора объекта, но вместо идентификатора вы передаете объект. Выполните следующие действия:

       await Post.create({title: 'Vou comer voce! ',
        body: 'What a wonderful life!',
        postedBy: jean.id,
        comments: c1.id,
      });
  

Теперь вы передаете оба идентификатора.

Кроме того, вы объявили сообщение как PostSchema, но затем пытаетесь создать сообщение, которое не объявлено. Вы должны переименовать Post.create в PostSchema.create или PostSchema в Post.

Комментарии:

1. Я просмотрел, и проблема в том, что вы объявили de post как PostSchema, но вы являетесь сообщением, которое не объявлено. Это должен быть PostSchema.create, а не Post.create.

2. module.exports = mongoose.model(‘Post’, PostSchema); Экспорт модуля в порядке.

3. Вы правильно импортируете ее? Я скопировал ваш код, и он сохраняет 3 коллекции в БД.

4. Да, проблема была с MongoDB Atlas. Теперь работает нормально!