Повторяющийся предмет, возвращенный из коллекции - PullRequest
1 голос
/ 30 мая 2020

Схема блога:

{
        body: { type: String, required: true },
        title: { type: String, required: true },
        published: { type: String, default: false },
        date: { type: Date, default: Date.now },
        user: { type: Schema.Types.ObjectId, ref: 'BlogUser' },
        comments: [{ type: Schema.Types.ObjectId, ref: 'Comments' }],
        likes:[{user:{ type: Schema.Types.ObjectId, ref: 'BlogUser' }}]
    }

Маршрут лайков для добавления лайков:

exports.likeBlog = async (req, res) => {
  const blog_id = req.params.blog_id;
  const user_id = req.body.user_id;
  await Blog.findByIdAndUpdate(
    blog_id,
    {
      $push: {
        likes: {
          user: user_id,
        },
      },
    },
    { new: true },
    (err, newBlog) => {
      if (err) res.status(422).json(err);
      console.log(newBlog);
      res.json(newBlog);
    }
  );
};

Путь блога для получения блога:

exports.getBlogByID = async (req, res) => {
  const blog_id = req.params.blog_id;
  try {
    const blog = await Blog.findById(blog_id)
      .populate("comments")
      .populate("user");
    console.log(blog);
    res.json(blog);
  } catch (error) {
    res.status(401).json(error);
  }
};

Когда я добавляю подобное, вызывая Like route от клиента, я получаю блог с правильным количеством лайков, т.е. только 1. Но когда я запрашиваю блог у Blog Route, он возвращает мне два объекта внутри массива «лайков», причем оба одинаковые. (тоже идентификатор). Почему я получаю такой результат? Имейте в виду, что я называю "Blog Route" после вызова "Like Route".

1 Ответ

0 голосов
/ 30 мая 2020

Он работал нормально после того, как я изменил «маршрут лайков» на этот:

exports.likeBlog = async (req, res) => {
  const blog_id = req.params.blog_id;
  const user_id = req.body.user_id;
  const blog = await Blog.findById(blog_id);
  blog.likes.unshift({ user: user_id });
  await blog.save();
  Blog.findById(blog_id)
    .then((result) => {
      res.json(result);
    })
    .catch((error) => {
      res.status(501).json({ error });
    });
};

Я до сих пор не знаю, в чем разница между ними.

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