본문 바로가기

개발 일기/NodeJS

[MongoDB] 페이징 처리 와 populate #mongoose

보통 게시판에는 쓴 사람의 정보가 들어간다. 그래서 게시판 스키마에는 유저의 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("댓글.아이디");

위와 같이 하면 된다.