Mongoose에서 쿼리를 작성할 때, 쿼리 메서드(예: find()
, findOne()
, updateMany()
등)를 호출하면 Mongoose는 해당 쿼리를 수행하고 결과를 반환하는 대신, 이를 체인 가능한 쿼리 객체로 반환한다.
이때 exec()
함수를 사용하여 쿼리 객체를 실행하고 결과를 가져올 수 있다.
exec()
함수를 사용하여 쿼리를 실행하면 MongoDB에 해당 쿼리를 전달하고, MongoDB로부터 반환된 결과를 Mongoose의 모델 인스턴스나 JavaScript 객체의 형태로 받을 수 있다. exec()
함수는 Promise를 반환하므로, .then()
또는 async/await
을 사용하여 결과를 처리할 수 있다.
router.post('/removeFromFavorite', (req, res) => {
Favorite.findOneAndDelete({ movieId: req.body.movieId, userFrom: req.body.userFrom })
.exec((err, doc) => {
if (err) return res.status(400).send(err)
return res.status(200).json({ success: true, doc })
})
})
exec((err, 결과값) => {}) 으로 사용하는 것 같음. 첫 번째 인자는 무조건 error
const User = mongoose.model('User', userSchema);
// Mongoose 쿼리 생성
const query = User.find({ age: { $gte: 18 } }).sort({ name: 1 });
// 쿼리 실행 및 결과 처리
query.exec()
.then(users => {
// 결과 처리
console.log(users);
})
.catch(error => {
// 에러 처리
console.error(error);
});
then()과 catch()를 사용할 수도 있음