Postingan lainnya
Buku Ini Koding!
Baru!
Buku ini akan jadi teman perjalanan kamu belajar sampai dapat kerjaan di dunia programming!
Kelas Premium!
Belajar Membuat API dengan NodeJS
Gunakan kupon "skillbaru" untuk diskon 100 ribu!
Join collection di node js
saya punya 2 collections yaitu forum dan user.
var ForumSchema = mongoose.Schema({
title: {
type: String,
require: true
},
slug: {
type: String,
},
image: {
type: String,
},
desc: {
type: String,
require: true
},
user: {
type: String,
},
date: {
type: String
}
})
var UserSchema = new mongoose.Schema({
nama: {
type: String,
require: true,
},
username: {
type: String,
require: true,
unique: true,
lowercase: true,
},
email: {
type: String,
require: true,
unique: true,
lowercase: true,
},
password: {
type: String,
require: true,
},
avatar: {
type: String,
},
joindate: {
type: String,
}
});
lalu pada halaman index dari forumnya saya akan menampilkan data forum beserta user yang submit forumnya. pada collection forum ada user yang berisi _id dari user. dan saya coba tampilkan seperti ini kok saya panggil di view ejs dengan "user.nama" kok error "Cannot read property 'nama' of null"
router.get('/', function(req, res){
Forum.find(function(err, forum){
User.findOne({ _id: forum.user }, function(err, user){
res.render('forum/index', {
judul: 'Forum',
css: '/public/css/forum.css',
forum: forum,
user: user
});
});
});
});
saya coba console.log dari forum.user hasilnya undefined
router.get('/', function(req, res){
Forum.find(function(err, forum){
console.log(forum.user); //yang di console log
User.findOne({ _id: forum.user }, function(err, user){
res.render('forum/index', {
judul: 'Forum',
css: '/public/css/forum.css',
forum: forum,
user: user
});
});
});
});
jadi inti dari pertanyaannya adalah gimana cara mengambil user di collection forum untuk di cocokan dengan _id dari collection user.
1 Jawaban:
Jawaban Terpilih
Di forumSchema untuk usernya type: mongoose.Types.ObjectsId, dan ref: 'User'
<pre> var ForumSchema = mongoose.Schema({ title: { type: String, require: true }, slug: { type: String, }, image: { type: String, }, desc: { type: String, require: true }, user: { type: mongoose.Schema.Types.ObjectId, ref: 'User', }, date: { type: String } }) </pre>
pada routernya di buat populate
<pre> router.get('/', function(req, res){ Forum.find({}).populate('user').sort('-_id').exec(function(err, forum){ res.render('forum/index', { judul: 'Forum', css: '/public/css/forum.css', forum: forum, }); }); }); </pre>
pada view ejsnya di panggil seperti ini
<pre> <%= forum.user.nama %> </pre>