백엔드

collection 조회 - mongodb connect

developerYoung 2022. 2. 21. 19:39
반응형

이 내용의 collection 조회 기능은 아래 링크의 mongodb connect 과정을 통한 조회 방법이니 mongoose와 다릅니다!

https://blog.naver.com/glory4god/222533893848

 
 

오늘 살펴볼 내용은 mongodb에서 collection을 조회하는 경우를 살펴보도록 함!!

 

먼저 서버는 nextjs 서버를 통해 작성된 내용임을 참고하도록 ...!

import { connectToDatabase } from 'lib/mongoDB/mongodb';
import { NextApiRequest, NextApiResponse } from 'next';

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse,
) {
  const { db } = await connectToDatabase();
}
 

위의 코드는 이전 글에서 작성한 connectToDatabase 함수를 통해 db라는 mongodb에 connect 된 객체를 가져올 수 있으니 객체구조화를 통해 db 가져오자!

 

그러면 db를 통해 이제 자유롭게 mongodb 문법을 적용할 수 있는데,

나의 db에는 현재 boards 라는 인스타 게시글에 대한 collection이 있으니 그 정보를 가져오도록 해보자!

 

import { connectToDatabase } from 'lib/mongoDB/mongodb';
import { NextApiRequest, NextApiResponse } from 'next';

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse,
) {
  const { db } = await connectToDatabase();

  const boards = await db.collection('boards').find({}).toArray();

  return res
        .status(200)
        .json(boards)
}
 

다음과 같이 boards 라는 collections에 전체 내용을 조회해서 가져옴을 확인할 수 있다!!

 

 

그렇다면 내가 원하는 데이터만을 조회하기 위한 몇가지 기능을 알아보도록 하자!

 

import { connectToDatabase } from 'lib/mongoDB/mongodb';
import { NextApiRequest, NextApiResponse } from 'next';

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse,
) {
  const { db } = await connectToDatabase();

  const boards = await db
    .collection('boards')
    .find({ username: 'karina' })
    .toArray();

  return res
        .status(200)
        .json(boards)
}
 

먼저는 find에 { username: 'karina' }을 넣음으로 username 이 karina랑 일치하는 게시글만을 조회하는 기능이다. 한마디로 sql의 where 절이라고 생각하면 됨!

 

아래처럼 karina 데이터만이 조회됨을 확인할 수 있음!

또 자세히보니 _id라는 objectId나 내가 원치않는 데이터는 제외시키고 싶은 경우도 있지 않을까?!

 

그 부분은 projection 절을 이용하면 내가 제외시키고 싶은 부분을 설정을 할 수도 있음!

import { connectToDatabase } from 'lib/mongoDB/mongodb';
import { NextApiRequest, NextApiResponse } from 'next';

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse,
) {
  const { db } = await connectToDatabase();

  const boards = await db
    .collection('boards')
    .find({ username: 'karina' }, { projection: { _id: 0, modifiedDate: 0 } })
    .toArray();

  return res
        .status(200)
        .json(boards)
}
 

나는 _id 와 modifiedDate를 제외시켜봤다.

(여기서 0은 false 이며 default값은 1임)

 

즉 0으로 변경된 내용을 제외하면 나머지는 그대로 가져와서 조회를 함!!

 

 

 

 

 

 

반응형