#node.js #mongodb #express #vue.js #axios
#node.js #mongodb #экспресс #vue.js #axios
Вопрос:
У меня есть функция списка задач в моем интерфейсе, вот демонстрация: https://gyazo.com/a10fcd7c470439fe5cc703eef75b437f
Все это обновляется с использованием массива в компоненте Vue, а затем с использованием v-models для отслеживания данных и изменения пользовательского интерфейса для отражения этого массива.
Когда пользователь нажимает «отправить», я хочу, чтобы он отправлял данные в базу данных.
Проблема, с которой я сталкиваюсь, заключается в том, что я не могу понять, как импортировать вновь созданные «задачи» (текстовое поле и флажок, которые создаются при нажатии кнопки ) в базу данных.
Так выглядит каждый документ списка задач в моей коллекции «списки задач» в mongo:
{
"_id":"5caca1498accb128c8974d56",
"title":"todolist1 11111 11111 11111 11111",
"userEmail":"test@gmail.com",
"todos":[
{
"_id":"5caca1498accb128c8974d57",
"description":"Get this done",
"completed":true}
],
"dateDue":"2019-04-07T18:24:31.207Z",
"__v":0
}
Кнопка «сохранить» в демонстрации имеет атрибут v-on: click с именем функции saveTodoList()
, которая затем отправляет запрос axios post на маршрут /updateTodoList
Не стесняйтесь задавать любые вопросы, которые помогут вам ответить на мой вопрос 🙂
Ответ №1:
Когда новое задание сохраняется после нажатия кнопки «Плюс», сделайте запрос /updateTodoList
с родительским документом _id
. Итак, ваш запрос может выглядеть примерно так:
Публикация /updateTodoList
:
Тело:
{ "_id": "5caca1498accb128c8974d56",
"todo": {
"description": "This is a newly added todo description",
"completed": false
}
}
Затем на стороне сервера проанализируйте этот объект body и обновите документ с _id
помощью сопоставления и вставьте новое задание в документ. Ваш запрос будет выглядеть примерно так:
todolist.findOneAndUpdate({_id: req.body._id}, { $push: {todos: req.body.todo } })
Надеюсь, это поможет.
Редактировать:
Каждый раз, когда вы отправляете задачу, используя приведенный выше запрос, mongo вставляет этот элемент в массив задач. Для отправки нескольких задач в одном запросе используйте $each
operator вместе с $push
. Официальная документация здесь.
Комментарии:
1. В теле, как бы я добавил несколько задач? И если я это сделаю, это перенесет все задачи (включая старые) в документ или только вновь созданные?
2. Отредактировал ответ со ссылкой на соответствующую документацию