Я пытаюсь представить сеточную структуру в MongoDB. У меня возникли проблемы с обновлением вложенного объекта. Точнее, массив столбцов, расположенный внутри элемента массива строк строк макета. Я создал следующие модели:
layoutModel.js
const LayoutSchema = новый mongoose.Schema({ строки: { тип: Массив, «по умолчанию»: [] }, }) rowModel.js
const RowSchema = новый mongoose.Schema({ столбцы: { тип: Массив, «по умолчанию»: [] }, ID пользователя: { тип: Строка, уникальный: ложный, }, id_макета: { тип: Строка, уникальный: ложный, } }) columnModel.js
const ColumnSchema = новый mongoose.Schema({ столбец: { тип: Массив, «по умолчанию»: [] }, ID пользователя: { тип: Строка, уникальный: ложный, }, id_макета: { тип: Строка, уникальный: ложный, } }) Я могу найти макет, связанный с текущим пользователем, а затем добавить новую строку в объект базы данных макетов.
server.js
// модели базы данных const Layout = require("./database/models/layout.js") const User = require("./database/models/userModel.js") const Row = require("./database/models/rowModel.js") const Column = require("./database/models/columnModel.js") app.post('/add-row', jsonParser, (req, res) => { User.findOne({ _id: req.body.profile_id }) .then((пользователь) => { const new_row = new Row({columns: [],}) //создаем новый объект базы данных строк new_row.save() //сохраняем объект //находим объект базы данных макета пользователя Layout.findOne({_id:user.layout_id}).then((layout) => { //найден макет пользователя layout.rows = [new_row, ...layout.rows] //добавляем новую строку в массив всех старых строк макет.save() //сохраняем объект }) }) res.send('Добавить строку') })

Однако, когда я пытаюсь добавить новый столбец в строку в массиве строк макетов, он не обновляется в базе данных. Я не знаю почему.
app.post('/add-column', jsonParser, (req, res) => { User.findOne({ _id: req.body.profile_id }) .then((пользователь) => { //пользователь вошел в систему, поэтому получите макет пользователя Layout.findOne({_id:user.layout_id}) .then((макет) => { //найден макет for(пусть строка в макете.rows){ let row_id = Layout.rows[row]._id.toString() //идентификатор текущей строки if(row_id === req.body.var_row_id){ //найдена строка, в которую нужно добавить столбец const new_column = new Column({column: [],}) //создаем новый объект базы данных столбца новый_колонка.save() layout.rows[row].columns = [...layout.rows[row].columns, new_column] //добавляем новый столбец в массив всех старых столбцов макет.сохранить() } } }) }) }) Любые советы приветствуются.
Мобильная версия