Итерация по данным объекта MongoDB - PullRequest
0 голосов
/ 09 февраля 2019

Я начну с того, как выглядят мои данные mongoDB:

_id : 5c5b450918cb2b121648ff7a
name : "dannondarko"
email : "dangilmail@gmail.com"
password : "$2a$10$3z5m1e9Pcfid72Q2GchCjeTD55/SsIxmtWr3I1ZiA.DX/KlpfTbdK"
date : 2019-02-06 20:35:21.973
__v : 0
posts : Array
    0 : Object
        note : "test for the user dannondarko"
        date : "02/08/2019"

Это всего лишь побочный проект, и, скорее всего, он никогда не будет запущен, поэтому не беспокойтесь о безопасности, когда я публикую эти данные!Что касается того, как я обрабатываю код в коде моего сервера:

app.get('/:username', (req, res) => {
  username = req.params.username.toLowerCase();
  const collection = req.app.locals.collection;

  collection.find({ name: username }).toArray(function (err, results) {
    if (err) {
      res.status(500).send("Error communicating with the DB.");
    } else if (results.length > 0) {
      console.log("Here are the results: " + results);
      console.log({people: results});
      res.status(200).render('profile', {posts: results, name: username});
    } else {
      next();
    }
  });
});

Что я делаю с этим кодом, скажем, вы направляетесь к адресной строке '/ dannondarko', она должна найти 'dannondarko' вколлекции, что делает хорошо, а затем переменная 'results' является полным объектом, который я разместил выше.То, что я пытаюсь сделать, это просто получить данные «сообщений», такие как заметка и дата.

Примечание и дата - единственные данные, которые мне нужны, которые будут отправлены в этот файл .ejs, который должен создать сообщение (вроде FB), в котором будут отображаться заметки пользователей и дата сообщения.Вот мой файл .ejs:

<h1 class="mt-4"><%= name %></h1>
<div class="container">
  <br>
  <% for(var i=0; i < posts.length; i++) { %>
      <div class="container">
          <label><%= posts[i].note %></label>
        <div class="container">
          <label><%=  posts[i].date %></label>
        </div>
      </div>
  <% } %>
</div>

Надеюсь, этого достаточно.Я полагаю, что мой недостаток заключается в том, что я не знаю, как просто извлечь массив 'posts' из MongoDB от определенного пользователя и выполнить итерации по объектам и отправить записку и дату в .ejs.

1 Ответ

0 голосов
/ 09 февраля 2019

results - это массив документов, и вы переводите этот массив в ejs как posts.Теперь в вашем файле ejs posts представляет массив документов, а не массив posts.Поэтому, если вы хотите просмотреть все результаты, вам следует отредактировать код следующим образом:

<% posts.forEach(post =>  { %>
<h1 class="mt-4"><%= post.name %></h1>
<div class="container">
  <br>
  <% post.posts.forEach(p =>  { %>
      <div class="container">
          <label><%= p.note %></label>
        <div class="container">
          <label><%=  p.date %></label>
        </div>
      </div>
  <% }) %>
</div>
<% }) %>

Если я хорошо понимаю структуру вашей модели монго, вышеприведенное должно помочь вам.

...