let test = {
name : 'Kim',
age : 29
}
let comments = {title : 'show'}
test['comments'] = comments
console.log(test)
let test {
name : 'Kim',
age : 29,
comments : {
title : 'show'
}
}
출력 시 test 객체에 comments객체가 key값으로 들어감
comments 객체의 key, value 값들도 할당되어진 형태
mongoose의 populat의 대한 설명이 잘 나온 블로그를 참조하자!
https://charles098.tistory.com/172
const mongoose = require("mongoose");
const commentsSchema = new mongoose.Schema({
user : {
type : String,
required : true
},
password : {
type : String,
required : true
},
content : {
type : String,
required : true
},
time : {
type : Date,
default : Date.now
},
posts : {
type : mongoose.Schema.Types.ObjectId,
ref : "Posts"
}
})
module.exports = mongoose.model("Comments", commentsSchema);
router.get('/comments/:_id', async (req, res) => {
const {_id : postId} = req.params // postId , _id 이름 바꾸기 => postId
try {
const post = await Posts.findById(postId)
if(post) {
const comments = await Comments.find({posts : postId}).sort({time: -1}) // postId에 해당한 comments 데이터만 추출
const newPost = post.toObject() // 1. mongoose에서 반환 된 객체는 자바스크립트의 객체가 아니다.
// 2. toObject() 함수를 사용하여, key, value값을 객체에 할당시켜준다,
// 3. 할당시킨 값을 새로운 변수에 삽입한다.
newPost['comments'] = comments // post는 객체 안에 key값 value값 삽입
return res.status(200).json({data : newPost}) // post 객체를 불러옴
}
} catch (err) {
return res.status(500).json({error: err})
}
})
Comments.find를 하여 comment 데이터만 const comments에 저장
위에 1번에서 보았던 방식으로 했을 때, post객체에 comments 객체가 삽입이 안되는 상황
이유 : mongoose에서 반환 된 객체는 자바스크립트 객체가 아니기 때문
해결 : toObject() 함수를 사용하여 자바스크립트 Object로 변환
newPost ( 구 post )에 comments 객체를 key값으로 삽입