#node.js #reactjs #mongodb #express #mongoose
#node.js #reactjs #mongodb #экспресс #мангуст
Вопрос:
Я понятия не имею, как я могу поместить объект во вложенный массив
это документ Совета директоров:
{
"boardMembers": [
"5f636a5c0d6fa84be48cc19d"
],
"boardLists": [
{
"cards": [],
"_id": "5f6387e077beba2e3c15d15a",
"title": "list one",
"__v": 0
}
],
"_id": "5f63877177beba2e3c15d159",
"boardName": "board1",
"boardPassword": "123456",
"boardCreator": "5f636a5c0d6fa84be48cc19d",
"g_createdAt": "2020-09-17T15:57:37.616Z",
"__v": 2
}
Мне нужно отправить задачу внутри массива cards (в определенный список с идентификатором)
вот код:
outer.post("/add-task/:id", auth, boardAuth, async (req, res) => {
const listId = req.params.id;
const board = await Board.findOne({ _id: req.board._id });
if (!board) return res.status(404).send("no such board");
const list = await List.findOne({ _id: listId });
if (!list) return res.status(404).send("List not found");
const task = new Task({
text: req.body.text,
});
board.boardLists.map((list) => {
if (listId.toString() === list._id.toString()) {
list.cards.push(task);
} else {
console.log("no task");
}
});
await board.save();
res.send(board);
});
теперь проблема в том, что когда я делаю запрос в postman, он показывает мне задачу внутри массива cards, который я хочу, но не сохраняет ее в MongoDB
Ответ №1:
Вы используете array.map()
, но:
- Ничего не возвращается при обратном вызове
map()
, который вернет массив с каждым элементомundefined
; - Вы ничему не присваиваете массив, возвращаемый
map()
.
Таким образом, вы можете использовать array.map()
для возврата массива, в котором task
помещается во вложенный список board.boardLists
, вот так:
board.boardLists = board.boardLists.map((list) => {
if (listId.toString() === list._id.toString()) {
return {
...list,
cards: list.cards.concat(task)
}
} else {
return list
}
});
Комментарии:
1. просто добавьте «, » после
...list
и попробуйте