보통 게시판에는 쓴 사람의 정보가 들어간다. 그래서 게시판 스키마에는 유저의 ObjectID가 들어가 있다.
import mongoose from "mongoose";
const BoardSchema = new mongoose.Schema({
uid: {
type: mongoose.Schema.Types.ObjectId,
ref: "user"//내 DB에 있는 컬랙션 이름
},
title: {
type: String
},
content: {
type: String
},
create_date: {
type: Date,
default: Date.now
},
comments: [
{
uid: {
type: mongoose.Schema.Types.ObjectId,
ref: "user"
},
comment: {
type: String
},
create_date: {
type: Date,
default: Date.now
}
}
]
});
const model = mongoose.model("Board", BoardSchema);
export default model;
populate 할 곳에 type을 mongoose.Schema.Types.ObjectId 로 설정해줘야 한다.
populate의 뜻이 궁금해서 찾아봤는데 거주한다는 의미로 해석하면 대충 이해된다.
ref에는 내가 populate 하는 스키마를 써주면 된다.
아래에 댓글에도 똑같이 해주었다.
- 페이징, populate, 정렬
const Board = await Board.find({})
.sort({ create_date: -1 })
.skip(parseInt(indexPage))
.limit(10)
.populate("uid");
'해석'
게시글을 불러오는데 전체 게시글 중 생성 날짜 중 최신순(내림차순)으로 정렬하여 indexPage만큼 건너뛰고 (0부터 시작) 총 10개를 불러오는데 그중 uid를 populate 하겠다.
parseInt는 서버에서 받아올 때 int로 인식을 못해서 형 변환을 해주었다.
.추가 200207
populate에서 배열 안에 있는 값을 해야 한다면
.populate("댓글.아이디");
위와 같이 하면 된다.
'개발 일기 > NodeJS' 카테고리의 다른 글
[Node] EC2에 Node.js 설치하기 #npm#EC2 (0) | 2020.02.10 |
---|---|
[Node] babel-node가 권한 문제로 실행이 안될 경우 #@babel-node (1) | 2020.02.07 |
[Node] 메일 인증 암호화 #crypto #encoding (0) | 2020.01.21 |
[Node] 서버에서 메일 보내기&메일 인증 #nodemailer (0) | 2020.01.21 |
[Node] 서버 세팅하기 #dotenv (0) | 2020.01.20 |