MongoDB

mongoose와 MongoDB 연결하기

mickey7 2024. 3. 9. 00:30

ODM : Mongoose

 

MySQL에서 자바스크립트로 사용하기 위해 sequelize를 사용했던 것처럼

MongoDB에도 mongoose라는 모듈을 사용할 수 있다.

 

sequelize가 ORM이었다면, Mongoose는 ODM인데, ODM은 Object-Document-Mapper의 약자

ODM은 MongoDB같은 Document DB와 객체를 매핑해주는 역할

 

Mongoose가 할 수 있는 일들

  • MongoDB와 객체를 매핑
  • 스키마를 정의
  • 스키마에서 모델로 변환
  • Populate를 통해 JOIN과 같은 기능 사용 가능
  • Promise, Callback 사용 가능

 

Create
const mongoose = require("mongoose");

// Connecting
mongoose
  .connect("mongodb://127.0.0.1:27017/roadbook", { //connect()함수를 통해 데이터베이스와의 연결을 시도
  })
  .then(() => {
    console.log("Connected to MongoDB");
  })
  .catch((err) => {
    console.log(err);
  });

// Defining Schema
const customerSchema = mongoose.Schema( //customer 스키마 정의
  {
    name: "string", //키와 타입 지정
    age: "number",
    sex: "string",
  },
  {
    collection: "newCustomer",  //컬렉션 이름 지정
  }
);

// Sechma -> Model
const Customer = mongoose.model("Schema", customerSchema); //모델로 변환

// Generate Instance
const customer1 = new Customer({ name: "홍길동", age: 30, sex: "남" }); //인스턴스 생성

// Save Data into MongoDB
customer1
  .save() //인스턴스를 데이터베이스에 저장(위의 roadbook 데이터베이스와 연결한 부분 참고)
  .then(() => {
    console.log(customer1);
  })
  .catch((err) => {
    console.log("Error : " + err);
  });

 

Update: Model.findById()

 

Customer.findById({ _id: "602d79fb542775e0dce0fe22" }, (err, customer) => {
  console.log("UPDATE : Model.findById()");
  if (err) {
    console.log(err);
  } else {
    customer.name = "modified";
    customer.save((err, modified_customer) => {
      if (err) {
        console.log(err);
      } else {
        console.log(modified_customer);
      }
    });
  }
});

 

Model.findById() no longer accepts a callback 오류가 발생했다..

콜백함수를 인자에 사용할 수 없나보다

 

해결책을 알아보니 Promise객체 반환값을 사용하기 위해 async/await으로 코드를 바꿔서 사용해야 된다고 한다.