Я не могу использовать .populate правильно, может быть, я делаю какую-то ошибку - PullRequest
0 голосов
/ 20 октября 2019

У меня есть две коллекции: первая - это посты, а вторая - пользователи. Когда пользователь входит в систему и публикует какую-либо историю, он попадает в коллекцию именованных сообщений. Post DB выглядит следующим образом.

{"_id":{"$oid":"5dac6e8f6c56a17a0b15a48b"},"user":{"$oid":"5dab52a4fdcf354ee1a6c58a"},"title":"test","category":"Entertainment","description":"sss","link":"","date":{"$date":{"$numberLong":"1571581583510"}},"__v":{"$numberInt":"0"}}

этот пользователь содержит идентификатор объекта пользователя, который опубликовал историю. User DB похожа на эту

{"_id":{"$oid":"5dab52a4fdcf354ee1a6c58a"},"name":"kush","email":"keshav@gmail.com","img":"https://res.cloudinary.com/kushagent47/image/upload/v1571483341/default-profile-picture-gmail-2_zf1b6h.png","password":"$2a$10$L6L5q4imtqGTR9LoBBgOseKzFVdeU55eugHuQxhWHixnPSaiMdq4q","date":{"$date":{"$numberLong":"1571508900973"}},"__v":{"$numberInt":"0"}}

Post.js

const mongoose = require('mongoose');

const PostSchema = new mongoose.Schema({
    title: {
        type: String,
        required: false
    },
    description: {
        type: String,
        required: false
    },
    tag: {
        type: String,
        required: false
    },
    category: {
        type: String,
        required: false
    },
    link: {
        type: String,
        required: false
    },
    user:{
        type: mongoose.Schema.Types.ObjectId,
        ref:'users'
    },
    date: {
        type: Date,
        default: Date.now
    }
});

const Post = mongoose.model('Post', PostSchema);

module.exports = Post;

index.js

   const express = require('express');
    const router = express.Router();
    const { ensureAuthenticated, forwardAuthenticated } = require('../config/auth');
    const passport = require('passport');

    const Post = require('../models/Post');
    const User = require('../models/User');




    //WELCOME
    router.get('/', (req,res) => {
      Post.find({})
      .populate('User')
      .then(docs => {
        res.render('welcome', {
          users: docs
        });
        console.log(docs.user.name);
      });
    });
    //Post Handler
    router.post('/', (req, res) => {
      const { user, title, description, category, tag, link } = req.body;
      const newPost = new Post({
        user: req.user.id,
        title: title,
        category: category,
        description: description,
        tag: tag,
        link: link
      });
      newPost.save()
      .then(
        post => {
          res.redirect('/dashboard/');
        })
      .catch(err => console.log(err));
    });
    // Dashboard
    router.get('/dashboard', ensureAuthenticated, function(req, res) {
      Post.find(function(err, docs){
      res.render("dashboard", {
        name: req.user.name,
        email: req.user.email,
        img: req.user.img,
        users: docs
      });
    });
    });


    module.exports = router;

User.ejs

const mongoose = require('mongoose');

const UserSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: false
    },
    img: {
        type: String,
        required: false
    },
    date: {
        type: Date,
        default: Date.now
    }
});

const User = mongoose.model('User', UserSchema);

module.exports = User;

welcome.ejs

<% users.forEach(function(results){ %>
    <%= results.category %>
    <%= results.user.name %>
<% }) %>

Я получаю results.category, но я не получаю results.user.name, я попробовал все, но он все еще не работает.

Когда я console.log (docs) показывает мне

[ { _id: 5dacb9028a808c1d733d8b9e,
    user: 5dab52a4fdcf354ee1a6c58a,
    title: 'IE-Caligo',
    category: 'Tech',
    description: 'eaffff',
    link: '',
    date: 2019-10-20T19:44:02.846Z,
    __v: 0 } ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...