#node.js #mongodb #express #mongoose
#node.js #mongodb #выразить #мангуст
Вопрос:
Мне нужно заполнить комментарии на основе их идентификаторов, которые сохраняются в другом schema == Project в виде массива комментариев.
Проект
const projectSchema = new mongoose.Schema({
user: { type: mongoose.Schema.Types.ObjectId, required: true, ref: 'User' },
title: { type: String, required: true },
description: { type: String, required: true, minLength: 200, maxlength: 500 },
// comments: { type: Array, default: [], ref: 'Comment' },
comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }],
})
Комментарий:
const commentSchema = new mongoose.Schema({
comment: { type: String, required: true },
project: { type: String, required: true, ref: 'Project' },
user: { type: String, required: true, ref: 'User' }
)}
Чего я хочу?
Я хочу заполнить и прокомментировать конкретный проект.. Это то, что я делаю, и он возвращает null:
router.get('/:projectId', currentUser, authenticate, async (req: Request, res: Response) => {
// search the project
const project = await Project.findById(req.params.projectId).populate('comment')
// return the populated comments
console.log('THE LIST OF PROJECT', project) // <-------- null
res.send(project)
})
Ответ №1:
попробуйте эту схему проекта
const projectSchema = new mongoose.Schema({
user: { type: mongoose.Schema.Types.ObjectId, required: true, ref: 'User' },
title: { type: String, required: true },
description: { type: String, required: true, minLength: 200, maxlength: 500 },
comments: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Comment' }]
});
и использовать «комментарии» при заполнении
const project = await Project.findById(new mongoose.Types.ObjectId(req.params.projectId)).populate('comments')
Комментарии:
1. Хорошо, пожалуйста, исправьте запрос find с помощью этого —>
Project.findById(new mongoose.Types.ObjectId(req.params.projectId)).populate('comments')
2. mongoosejs.com/docs/populate.html просто проверьте, не упустили ли вы чего-то
3. Подождите, это сработало!
const comments = await Project.findById(new mongoose.Types.ObjectId(req.params.projectId)).populate('comments')
Спасибо!!