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으로 코드를 바꿔서 사용해야 된다고 한다.