Пользователи могут размещать элементы, которые могут запрашивать другие пользователи. Таким образом, пользователь создает один элемент, и многие пользователи могут запросить его. Итак, я подумал, что наилучшим способом было бы включить в схему продукта множество пользователей, для которых он был запрошен. А пока я просто хочу сохранить этот идентификатор пользователя и имя. Вот схема:
const Schema = mongoose.Schema;
const productSchema = new Schema({
title: {
type: String,
required: true
},
category: {
type: String,
required: true
},
description: {
type: String,
required: true
},
userId: {
type: Schema.Types.ObjectId,
ref: 'User',
required: true
},
requests: [
{
userId: {type: Object},
firstName: {type: String}
}
],
});
module.exports = mongoose.model('Product', productSchema);
В моем контроллере я сначала нахожу элемент, а затем вызываю save ().
exports.postRequest = (req, res, next) => {
const productId = req.body.productId;
const userId = req.body.userId;
const firstName = req.body.firstName;
const data = {userId: userId, firstName: firstName};
Product.findById(productId).then(product => {
product.requests.push(data);
return product
.save()
.then(() => {
res.status(200).json({ message: "success" });
})
.catch(err => {
res.status(500).json({message: 'Something went wrong'});
});
});
};
Во-первых, можно ли так делать? Я нашел несколько сообщений об этом, но они не находят и не вызывают save, они используют findByIdAndUpdate () и $ push. «Это неправильно» делать так, как я это сделал? Это второй способ, которым я попробовал, и я получаю тот же результат в базе данных:
exports.postRequest = (req, res, next) => {
const productId = req.body.productId;
const userId = req.body.userId;
const firstName = req.body.firstName;
const data = {userId: userId, firstName: firstName};
Product.findByIdAndUpdate(productId, {
$push: {requests: data}
})
.then(() => {
console.log('succes');
})
.catch(err => {
console.log(err);
})
};
А во-вторых, если вы посмотрите на снимок экрана, данные в правильном формате и структуре? Я не знаю, почему там есть _id, а не просто идентификатор пользователя и имя.