MongoDB에서 Collection을 자동으로 생성하기

mhlog·2023년 5월 14일
0

Nodejs

목록 보기
2/2
post-thumbnail

Nodejs 환경에서 유저가 회원가입을 하면 유저의 _id 값을 이용하여 Collection을 자동으로 생성하는 방법을 알아보자. 구글에 나와있는 방법은 버전이 맞지 않아서 잘 동작하지 않는 것 같아 공식 문서를 참고하였다.

MongoDB 공식문서 (createCollection)

우선 회원 가입이 완료되면 userInfo Collection에 다음과 같은 Field들이 저장된다. 여기서 MongoDB에서 자동으로 생성해주는 _id 값을 이용하여 Collection을 생성하려면 다음과 같이 코드를 작성하면 된다.

...생략

connectToMongo();
  try {
    const db = getDB();
    const collection = db.collection('userInfo');
    const isEmailExist = await collection.findOne({ email: enteredValue.email });
    if(isEmailExist) throw new Error("Email Already Exist!");
    const { hashedPassword, salt } = await createHashedPassword(enteredValue.password);

    const insertDoc = {
      name: enteredValue.name,
      email: enteredValue.email,
      password: hashedPassword,
      salt: salt
    }

    const result = await collection.insertOne(insertDoc);
    const insertedId = result.insertedId.toString();
    const userCollection = await db.createCollection(insertedId);

    console.log(`Collection Inserted! Collection Name: ${userCollection.collectionName}`);
    
...생략

우선 userInfo Collection에 접근해서 유저가 입력한 이메일이 DB에 저장된 값들과 중복이 아닌지 확인하고, 중복이 아니라면 crypto 방식을 이용하여 입력한 비밀번호를 암호화한다.

collection.insertOne은 Promise를 반환하기 때문에 async await 문법을 이용하였다. result의 insertedId 객체는 DB에 저장되는 _id값을 반환한다. 이 값은 ObjectId('xxx')와 같은 형태로 저장되기 때문에 이를 string으로 반환하려면 toString 함수를 사용하면 된다.

이제 저장할 Collection의 이름을 받아왔으니 createCollection으로 Collection을 생성해주면 된다. createCollection도 Promise를 반환하기 때문에 async await 문법을 이용하였다.

0개의 댓글