2024. 1. 10. 01:46ㆍMERN
Mongoose를 사용하지 않으면, 새로운 것을 추가할 때마다 MongoClient를 사용하고 / connect 메서드로 연결을 설정해야 했음
심지어 close()로 연결을 종료하기까지 해야 함
Mongoose에는 메서드가 딱 하나만 필요함
mongoose.connect("\ url")
위처럼 하면 새롭게 생성할 때마다 새 연결을 여닫을 필요가 없음
이렇게 Mongoose는 데이터베이스와 백엔드가 항상 효율적으로 연결되도록 함
다만 Mongoose의 경우 사용하기가 조금 어렵다는 단점이 있는데,
이는 백엔드와 데이터베이스의 연결을 관리하는 것 외에도 프로미스를 반환함 (then을 추가해야 함)
즉, mongoose를 사용하지 않으면, 새로운 것을 생성할 때마다 mongoClient를 사용해야 함
아래 코드 처럼, client를 통해 connect를 하여 연결을 해야하고, 아래 close로 종료까지 해주어야 했음
const client = new MongoClient(url);
try{
await client.connect();
const db = client.db();
const result = await db.collection('products').insertOne(newProduct);
// const result = db.collection('products').insertOne(newProduct);
}
catch(error){
return res.json({message:"could not store data"})
}
client.close()
res.json(newProduct)
그러나, Mongoose를 이용하면 메서드가 딱 하나만 필요하게 된다. ( 기존 connect + close )
Mongoose에서 save() method는 mongoose에서 생성했던 모델 및 스키마에 연결하여 사용할 수 있음
save() method는 문서를 저장할 때 필요한 무거운 작업을 모두 수행함 => 장점 => insertOne 대신 save를 사용하여 올바른 데이터베이스를 참조해 줌
connect와 마찬가지로 save는 프로미스를 반환하기 때문에 비동기식임. await 필요 (DB와 상호 작용에 시간이 소요되기 때문)
그러면 프로미스가 저장된 product를 내보내게 됨
const createProduct = async(req, res, next) =>{
const createProduct = new Product({
name: req.body.name,
price: req.body.price
});
const result = createdProduct.save();
res.json(result);
};
'MERN' 카테고리의 다른 글
백엔드(Node) & MongoDB(데이터베이스) 연결 (3) | 2024.01.14 |
---|---|
Mongoose (MongoDB - DB 생성, 조회) (0) | 2024.01.12 |
MongoDB 연결, 시작2 (0) | 2024.01.10 |
MongoDB란 (feat. NoSQL, SQL) (0) | 2024.01.03 |
MERN - Express 오류 처리 (0) | 2023.09.17 |