Узел Мангуст: заполнить массив объектов ref

#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') Спасибо!!