Как удалить элемент массива из Mongodb [Angular] - PullRequest
0 голосов
/ 04 мая 2020

Этот вопрос не отвечает на мой вопрос: Удалить элемент из массива массива в MongoDb

Я создал очень базовое c MEAN-приложение. Я создаю (или пытаюсь создать) механизм стекового потока. У меня есть статья, в которой есть положительные и отрицательные голоса. Вот скриншот записи mongodb. Таких записей много: enter image description here

Вы можете видеть, что есть массив upvoters и downvoters. У меня есть случай, когда текущий вошедший в систему пользователь, который ранее проголосовал за статью, теперь хочет отказаться от этой же статьи. Затем его имя должно быть перенесено из массива upvoters в массив downvoters. Это включает в себя два шага:

  1. Удалить текущего зарегистрированного пользователя из upvoters массива
  2. Добавить того же пользователя в downvoters массив.

Шаг № , 2 Я могу сделать. Но с шагом 1 я столкнулся с проблемой. Вот мой код Фокус на removeUserFromUpvotersList() метод:

article.component.ts

    export class ArticleComponent implements OnInit {
      articleId : String = '';
      article;      

      currentLoggedInUserId: string;    

      updatedVotes={
        articleid: "",
        upvotes: 0,
        downvotes: 0,
        upvoters: [],
        downvoters: []
      };

      ...

      downvoted() {
        console.log("downvoted");
        this.removeUserFromUpvotersList();
      }

      removeUserFromUpvotersList() {
        this.updatedVotes.upvoters.push(localStorage.getItem('userid'));
        this._articleService.removeUserFromUpvotersList(this.updatedVotes, localStorage.getItem('userid'))
        .subscribe (
          res => {
          },
          err => console.log(err)
        );
      }
    }

article.service.ts

export class ArticleService {
  ...
  private _deleteFromUpvotersListURL = "http://localhost:3000/api/remove-from-upvoters-list";
  ...

  removeUserFromUpvotersList(updatedArticle, id) {
    return this.http.delete<any>(this._deleteFromUpvotersListURL+'/'+id, updatedArticle);
  }
}

api.ts

router.delete('/remove-from-upvoters-list/:id', (req, res) => {
    console.log("removing from upvoters list");
    let userId = req.params.id;
    let articleId = req.body.articleid;
    Article.update({ articleid: articleId }, { $pull: { upvoters: userId } }).then(opResult => console.log(opResult));
    Article.deleteOne({ userId: userId }, (error, userId) => {
        if (error) {
            console.log(error)
        } else {
            if (!article) {
                res.status(401).send('something went wrong')
            } else {
                console.log('successfully deleted');
            }
        }
    })
})

Я знаю, что мой API работает нормально, потому что я могу выполнять операции добавления и обновления. Пожалуйста, помогите мне с удалением.

1 Ответ

1 голос
/ 04 мая 2020

Во внешнем интерфейсе вы вызываете метод put, а конечная точка бэкэнда удаляется. Переход на http.delete в сервисе внешнего интерфейса должен решить проблему.

...