Mongoose обновляет вложенную схему - PullRequest
0 голосов
/ 06 мая 2019

Я не могу найти рабочее решение для обновления вложенной схемы в Mongoose.

Схемы:

const boardSchema = new mongoose.Schema(
  {
    name: { type: String, required: true },
    tasks: { type: [taskSchema] }
  },
)

const taskSchema = new mongoose.Schema(
  {
    title: { type: String, required: true },
    priority: { type: Number, default: 0, required: true }
  },
)

const Board = mongoose.model('Board', boardSchema)
const Task = mongoose.model('BoardTask', taskSchema)

Как обновить задачу внутри массива board.tasks?Я пытался

const taskId = 'demo'
const taskUpdate = {title: 'Demo', priority: 0}

Board.findOneAndUpdate({ taskId: taskId }, taskUpdate)

taskSchema.findByIdAndUpdate(taskId, taskUpdate)

Board.findById(boardId).then(board => {
    BoardTask.findOneAndUpdate(board.taskId, taskUpdate)
})

Я думаю, что мне здесь не хватает точки, я даже не уверен, стоит ли мне пытаться обновить ее из taskSchema или модели задач.

1 Ответ

0 голосов
/ 07 мая 2019

Если вы хотите обновить задачу, сохраненную в модели платы, вам не нужен набор задач и, следовательно, нет необходимости в модели задач.И запрос на обновление будет выглядеть примерно так: -

const getUpdate = (update) => {
  const updateQuery = {};
  Object.keys(update).forEach(key => {
    updateQuery[`tasks.$.${key}`] = update[key];
  });
  return updateQuery;
}

const update = {
  title: "newtitle",
  taskId: "22"
}

Board.findOneAndUpdate(
  { _id: boardId, “tasks._id”: taskId },
  {$set: getUpdate(update) }
);

Тем не менее, при этом я бы порекомендовал вам иметь другую коллекцию задач и сохранить ссылку на родительский идентификатор платы в задаче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...