создание поля массива в mongodb с помощью mongoose - PullRequest
0 голосов
/ 01 ноября 2019

Я пытаюсь создать коллекцию в mongodb, где поле с именем lists будет содержать массив link и linkName. Я успешно могу создать два отдельных поля link и linkName, но не могу сохранить значение внутри lists.

Код модели для mongodb: -

const socialSchema = new Schema({
    lists: [{
        link:{ formType: String},
        linkName: { formType: String}
    }]
})

Код API :-( этот код предназначен только для создания, позже он попытается использовать findOneAndUpdate для обновления существующего поля

router.route('/', [auth]).post(async (req, res) => {
    const {linkName, link } = req.body
    try {
        console.log(req.body)//Ex. { linkName: 'facebook', link: 'www.facebook.com'}
        const social = new Social({
          //Stuck here!!!
        })
        await social.save()
        res.json(social)
    } catch (err) {
        console.error(err.message);
        res.status(500).send('Server Errors')
    }
   }
)

Часть кода внешнего интерфейса (React)

const [formData, setFormData] = useState({
        linkName: '',
        link: ''
  });
  const {linkName, link} = formData

  const onChange = e =>
  setFormData({ ...formData, [e.target.name]: e.target.value });

  const handleSubmit = async e => {
    e.preventDefault()
    const socialList = {
      linkName,
      link
    }
    try {
      const config = {
                headers: {
                    'Content-Type': 'application/json'
                }
            };
      const body = JSON.stringify(socialList)
      const res = await Axios.post('/api/social', body, config)
      console.log(res)
    } catch (err) {
      console.error(err);
    }
  }

1 Ответ

0 голосов
/ 01 ноября 2019

В вашей схеме измените значение с {formType: String} на {type: String}.

const data = {link: req.body.link, linkName: req.body.linkName};
Social.create({
  links: [data]
});

Это должно работать.


МОЙ ПОЛНЫЙ КОД РАБОТЫ, КОТОРЫЙ Я ИСПЫТАЛ

const schema = new mongoose.Schema({
  links: [
    {
      link: { type: String },
      linkName: { type: String }
    }
  ]
});

const Model = mongoose.model("test", schema);

const doc = { link: "link", linkName: "linkname" };

Model.create({
    links: [doc]
});

...