Количество просмотров объекта MongoDB не увеличится - PullRequest
0 голосов
/ 27 апреля 2019

Я новичок в программировании и недавно обновил мою схему user.js, включив в нее следующее, чтобы попытаться захватить количество просмотров объекта блога.

   title: String,
   image: String,
   body: String,
   viewCount: {
      type: Number,
      default: 0,
   },

Я храню данные в MongoDB.Я пытаюсь создать боковую панель на веб-сайте, которая будет отображать наиболее просматриваемые сообщения в блогах.

Я запускаю этот маршрут на своей индексной странице.

// INDEX ROUTE
router.get("/blogs", function (req, res) {
  var perPage = 10;
  var pageQuery = parseInt(req.query.page);
  var pageNumber = pageQuery ? pageQuery : 1;
  var noMatch = null;
  if (req.query.search) {
    const regex = new RegExp(escapeRegex(req.query.search), 'gi');
    Blog.find({name: regex}).skip((perPage * pageNumber) - perPage).limit(perPage).sort({"created": -1}).exec(function (err, blogs) {
      if (err) {
        throw new Error(err);
      }

      Blog.count({name: regex}).exec(function (err, count) {
        if (err) {
          throw new Error(err);
         }

        if (err) {
          console.log("ERROR!");
        } else {
          if (blogs.length > 1) {
            noMatch = "No blogs match that query, please try again";
          }
          Blog.find({}).sort({viewCount: -1}).limit(5).exec(function (err, topBlogs) {
            if (err) {
              console.log(err);
            } else {
              res.render("blogs/index", {blogs: blogs, topBlogs: topBlogs, current: pageNumber, pages: Math.ceil(count / perPage), currentUser: req.user, noMatch: noMatch, search: req.query.search});
            }
          });

        }
      });
    });
  } else {
    Blog.find({}).skip((perPage * pageNumber) - perPage).limit(perPage).sort({"created": -1}).exec(function (err, blogs) {
      if (err) {
        throw new Error(err);
      }

      Blog.count().exec(function (err, count) {
        if (err) {
          console.log("ERROR!");
        } else {
          Blog.find({}).sort({viewCount: -1}).limit(5).exec(function (err, topBlogs) {
            if (err) {
              console.log(err);
            } else {
              res.render("blogs/index", {blogs: blogs, topBlogs: topBlogs, current: pageNumber, pages: Math.ceil(count / perPage), currentUser: req.user, noMatch: noMatch, search: false});
            }
          });
        }
      });
    });
  }
});

И я установил в ejsследуйте, чтобы отобразить его.

                <h3 id="topposts">Top Posts</h3>
                <ul class="list-group">
                    <% topBlogs.forEach(function(topBlog, i){ %>
                    <li class="list-group-item"><a class="header" href="/blogs/<%= topBlog._id %>"><%= i+1 %>.  <%=topBlog.title%></a></li>
                     <% }); %>
                </ul>
        </div>

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

...