Я хочу сохранить коллекцию пользователей _id от текущего пользователя, вошедшего в систему, в коллекцию проектов, когда новый проект сохраняется в базе данных. Проект сохраняется, но поле createdby отсутствует в БД после сохранения. Я следовал этому примеру: https://mongoosejs.com/docs/2.7.x/docs/populate.html Я обнаружил, что это правильный путь для ссылок в нескольких примерах.
Что мне не хватает?
модель проекта
const mongoose = require('mongoose');
const projectSchema = new mongoose.Schema({
projectTitle:{
type:String,
required: true
},
createdBy: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Users' ,
},
createdAt: {
type: Date,
default: Date.now,
required: true
},
});
module.exports = mongoose.model('Projects', projectSchema)
форма проекта публикации маршрута
// @desc Process project add form
// @route POST /project
router.post('/', ensureAuth, async (req, res) => {
req.body.user = req.user.id
await Project.create(req.body)
res.redirect('/')
})
Хотя это не совсем ясно из ваших фрагментов кода, я предполагаю, что вам не хватает этого фрагмента кода в контроллере:
// @desc Process project add form
// @route POST /project
router.post('/', ensureAuth, async (req, res) => {
req.body.user = req.user.id // not sure if this is necessary?
req.body.createdBy = req.user._id
await Project.create(req.body)
res.redirect('/')
})
При использовании mongoose.Schema.Types.ObjectId
.id
— это просто метод получения, который возвращает строковое представление ObjectId (по сути, ._id.toString()
). Чтобы правильно сохранить ссылку, вы должны сохранить ._id
документа User
(в моем коде я предполагаю, что req.user
содержит полный документ, чтобы вы могли получить доступ к ObjectId).