Мангуст — findOneAndUpdate перезаписывает другие документы

#javascript #node.js #angular #express #mongoose

Вопрос:

Я пытаюсь создать доску заданий с задачами, которые ежемесячно обновляются для моих коллег. Идея состоит в том, что есть одна таблица со всеми назначениями и другая таблица, в которой есть те же назначения, но с дополнительным полем даты. Предполагается, что программа берет все задачи, которые не отключены, и дублирует их в отдельную таблицу, и именно там клиент получает данные для заполнения таблицы. Каждая задача также имеет уникальное значение идентификатора, что в основном позволяет мне находить ее в двух отдельных таблицах. Вот тут-то у меня и возникли проблемы.

На стороне клиента у меня есть выпадающее меню со статусами («Отключено», «Открыто», «Завершено» и т. Д.), И при изменении значения выпадающего списка предполагается обновить базу данных. Но всякий раз, когда я меняю статус, это заканчивается перезаписыванием другой совершенно несвязанной задачи, даже когда я использую уникальные идентификаторы для запроса базы данных. Прежде чем я войду в код, некоторые слова могут показаться «странными», потому что английский-мой второй язык, и есть некоторые слова на моем родном языке, которые я не знал, как перевести, поэтому я просто написал их так, как мы их произносим, просто по-английски.

Вот как выглядит выпадающий список:

 <select class="custom-select" id="statusSelect" (change)="changeStatus($event, task._id, task.customername, task.provname, task.description, task.date, task.status, task.assignmentID)">
      <option selected disabled>. . .</option>
      <option value="Open">Open</option>
      <option value="Complete">Complete</option>
      <option value="Disabled">Disabled</option>
</select>
 

Данные передаются здесь:

   changeStatus(event, userTaskID, userCustomerName, userProvname, userDescription, userDate, userStatus, userAssignmentID) {
let valueToChange = event.target.value;
let taskToSearch = {
  taskID: userTaskID,
  customername: userCustomerName,
  provname: userProvname,
  description: userDescription,
  date: userDate,
  status: userStatus,
  assignmentID: userAssignmentID,
  statusToChange: valueToChange 
}
console.log("Task to search from component.ts");
console.log(taskToSearch)
this.dbService.changeTaskStatus(taskToSearch).subscribe(data => {
  this.allTasks = data;
  console.log(data);
});
 

}

Функция обслуживания:

  changeTaskStatus(taskToChange):Observable<any>
  {
    console.log("Task to change from service");
    console.log(taskToChange)
    return this.http.post("http://localhost:3000/changestatus", taskToChange, httpOptions);
  }
 

My index.js file:

 router.post('/changestatus', async function(req, res, next) {
  let result = await dbModule.changeTaskStatus(req.body);
  res.json(result);
});
 

My dbModule.js:

     changeTaskStatus: async (objectFromUser) => {
        if (objectFromUser.statusToChange == "Complete") {
            console.log("Complete!");
            return Task.find({});
        }
        else
        {
            console.log(objectFromUser);
            console.log(objectFromUser);
            assignmentToUpdate = new Assignment();
            assignmentToUpdate = Assignment.find({
                assignmentID: objectFromUser.assignmentID
            });
            console.log("Assignment found: *******************")
            console.log(assignmentToUpdate);
            assignmentToUpdate.status = objectFromUser.statusToChange;
            console.log("Updated assignment");
            console.log(assignmentToUpdate);
            await Assignment.findOneAndUpdate({
                customername: objectFromUser.customername,
                provname: objectFromUser.provname,
                description: objectFromUser.description,
                status: objectFromUser.statusToChange,
                assignmentID: objectFromUser.assignmentID
            });
            await Task.findOneAndUpdate({
                customername: objectFromUser.customername,
                provname: objectFromUser.provname,
                description: objectFromUser.description,
                status: objectFromUser.statusToChange,
                date: objectFromUser.date,
                assignmentID: objectFromUser.assignmentID
            });
            return Task.find({});
        }
    
    }
 

Как вы можете видеть, я попытался войти в консоль, чтобы убедиться, что передаю правильные данные, что я и делаю. Я пытался исправить это чуть больше месяца назад и начинаю по-настоящему злиться на себя. Если у кого-нибудь есть хоть малейшее представление о том, что я делаю не так, и он может объяснить мне это, я был бы очень признателен. Спасибо.