#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. Теперь работает нормально!