Я создаю приложение из списков Todo, и в каждом списке будет х заданий. Проблема в том, что я думал, что мог бы сделать что-то подобное в схеме задач, чтобы сослаться на список, к которому принадлежит задача:
list: {
type: mongoose.Schema.Types.ObjectId, ref: 'list'
}
Вот полный код моих моделей:
const mongoose = require('mongoose')
const listSchema = new mongoose.Schema({
title: {
type: String,
unique: false,
required: [true, 'debes escribir un titulo']
},
createdAt: {
type: Date,
default: Date.now()
}
})
const mongoose = require('mongoose')
const taskSchema = new mongoose.Schema({
name: {
type: String,
unique: false,
required: true
},
doned: {
type: Boolean,
default: false
},
updatedAt: {
type: Date,
default: Date.now()
},
// a task belongs to a list:
list: {
type: mongoose.Schema.Types.ObjectId, ref: 'list'
}
})
Но, похоже, в Интернете нет большой помощи в том, как заставить это работать с использованием этого подхода.
Поэтому я взглянул на документацию mongoDb, и они говорят, что рекомендуют использовать справочные руководства
Итак, я изменился так:
const mongoose = require('mongoose')
const taskSchema = require('./task')
const listSchema = new mongoose.Schema({
title: {
type: String,
unique: false,
required: [true, 'debes escribir un titulo']
},
createdAt: {
type: Date,
default: Date.now()
},
tasks: [
taskSchema
]
})
Но теперь я не знаю, как каждый раз, когда я создаю задачу (выполняется запрос POST к задаче), как я нахожусь нато же время будет связано с определенным списком.
Вот мои маршруты API для задач:
routerTasks.post('/task', (req,res, next) => {
Task.create(req.body)
.then(task => res.send(task))
.catch(next)
})
routerTasks.put('/task/:idTask', (req, res) => {
Task.findByIdAndUpdate(req.params.idTask, req.body)
.then(task => res.send({nueva_informacion: task}))
.catch()
})
и для моих списков:
routerLists.post('/list', (req, res, next) => {
List.create(req.body).then((list) => {
res.send(list)
}).catch(next)
})
routerLists.put('/list/:id', (req, res) => {
List.findByIdAndUpdate(req.params.id, req.body)
.then(list => res.send({nueva_informacion: list}))
})
Мой вопросэто ... может быть, я должен создать задачи в запросе на поставку из недавно созданного списка ? В таком случае, тогда запрос POST задач бесполезен?
вот ошибка, которая выдает меня, когда я пытаюсь добавить задачу и одновременно ссылаться на нее в списке:
routerTasks.post('/task/:listId', (req,res, next) => {
List.findOne({_id: req.params.listId}).then((record) => {
record.tasks.push(req.body);
record.save()
})
})
// TypeError: Invalid schema configuration: `model` is not a valid type within the array `tasks`