#mongodb #mongoose
Вопрос:
У меня есть эта схема с
const userSchema = new mongoose.Schema( { skills: [{ name: { type: String, unique: true }, level: { type: Number } }],
и я пытаюсь, получив массив объектов от клиента, добавить их все сразу под пользователем в MongoDB
моя старая реализация, когда это был всего лишь массив, приведена ниже. Я понятия не имею, как это сделать сейчас, тхо. Кто-нибудь может мне помочь?
const { email } = session; const { skill } = req.body; if (req.method === 'POST') { try { const user = await User.findOne({ email }); const updatedUser = await User.findOneAndUpdate( { email }, { skills: [...user.skills, { name: skill }] } );
Ответ №1:
const { email } = session; // object from the client const { skills } = req.body; if (req.method === 'POST') { try { const updatedUser = await User.findOneAndUpdate( { email }, { $set: {skills} } );
лучше всего правильно отформатировать массив с внешнего интерфейса, если не использовать карту перед вызовом findOneAndUpdate
Комментарии:
1. Так что я попробовал до сих пор, и я не мог управлять, чтобы распространить существующий массив, и добавить новые элементы к ней с $задано, но я нашел $addToSet зафиксировано, что по мне, так я в принципе и сделал
const { skill: skills } = req.body; if (req.method === 'POST') { try { const user = await User.findOne({ email }); const updatedUser = await User.findOneAndUpdate( { email }, { $addToSet: { skills } } );
свой вариант ответа, хотя поставить меня на правильном пути, и, вероятно, есть способ сделать это с $набора, который мне не удалось найти. Спасибо2. приятно это слышать, чувак!