Много к одному отношения в мангусте. Как получить доступ и вывести упомянутые идентификаторы объекта? - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь создать функцию "списка желаний" для пользователей в моем приложении node / mongo. Я предположил, что лучший способ смоделировать схему - это ссылаться на элементы, которые им нравятся. Пока мое чтение привело меня к этой точке (я не очень знаком с Types.ObjectID):

Модель схемы

var UserSchema = new mongoose.Schema({
  email: {
    type: String,
    unique: true,
    required: true,
    trim: true
  },
  password: {
    type: String,
    required: true
  },
  wishlist: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: "Wishlist",
    required: true
  }]
});

Мне удалось написать некоторый код, который помещает соответствующий _id в массив "Likes":

Product.findById(productID).exec(function (err, user) {
    User.updateOne({ _id: req.session.userId }, { "$push": { "wishlist": productID } }, function (err, user) {
      if (err) {
        console.log("Failed to add")
      } else {
        console.log(productID + " has been added")
      }
    });
 });

Это выводит в базу данных примерно так:

{
        "_id" : ObjectId("5c3f7e1f1268203b1f31cb17"),
        "email" : "email",
        "password" : "password",
        "__v" : 0,
        "wishlist" : [
                ObjectId("5c41f4b42f82b14798d5c7fc"),
                ObjectId("5c41f4b42f82b14798d5c7ff")
        ]
}

Я застрял на том, как вывести эти элементы списка желаний в свой шаблон. Мое предположение состояло в том, чтобы получить данные как это:

router.get('/wishlist', middleware.requiresLogin, function(req, res, next) {

  User.findOne({ _id: req.session.userId }, function(err, user) {
    res.render('wishlist', {
      title: 'Wishlist',
      template: 'wishlist',
      saved: user.wishlist,
      header: true,
      footer: true
    });
  });
});

И цикл по пунктам, как это:

{{#each saved }} Code goes here {{/each }}

Правильно ли я подхожу к этому?

1 Ответ

0 голосов
/ 18 января 2019

вам нужно заполнить поле списка желаний, попробуйте это,

User.findOne({ _id: req.session.userId }).
  populate('wishlist').
  exec(function (err, user) {
    res.render('wishlist', {
      title: 'Wishlist',
      template: 'wishlist',
      saved: user.wishlist,
      header: true,
      footer: true
    });
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...