Query
- MongoDB에도 sql의 where과 유사한 조건절 사용 가능
- query는 비동기적으로 처리해야 한다.
- MongoDB의 QUERY는 BSON형식으로, 기본 문법 그대로 mongoose에서 사용 가능
예제
Person.find({
name:'nice',
age:{
$lt:20,
$gte:10,
},
Language:{
$in:['ko','en'],
},
$or:[
{status:'ACTIVE'},
{isFresh:true}
],
});
- {key:value}로 exact match 가능
- $lt, $lte, $gt, $gte를 사용하여 range query 작성 가능(less than, greater than...)
- $in을 사용하여 다중 값으로 검색
- $or를 사용하여 다중 조건 검색
- $in의 경우 mongoose에서 쿼리 값으로 '배열'이 주어지면 자동으로 $in 쿼리를 생성해줌
- 또한 MongoDB에서 Document의 속성 유무를 체크하기 위해 $exists operator를 사용할 수 있음.
express.js에 Mongoose ODM 사용하기
- express.js는 프로젝트 구조를 자유롭게 구성할 수 있기 때문에 어느 부분에 Mongoose ODM을 위치시키면 좋을지 적절한 위치를 결정하는 것이 중요
- 일반적으로 models 디렉터리에 schema와 model을 같이 위치
- app 객체는 어플리케이션 시작을 의미하는 부분이므로
- 해당 부분에 데이터베이스 연결을 명시하는 mongoose.connect를 위치
mongoose ODM 커넥션 이벤트
- express.js 어플리케이션은 종료되지 않고 동작하기 때문에 계속해서 데이터베이스가 정상적으로 동작하는지를 파악하기 위해 동작 중에 발생하는 데이터베이스 연결 관련 이벤트에 대한 처리를 하는 것이 좋음
mongoose.connect('url');
mongoose.connection.on('connected',()=>{})
mongoose.connection.on('disconnected',()=>{})
mongoose.connection.on('reconnected',()=>{})
mongoose.connection.on('reconnectedFailed',()=>{})
예제
index.js (실행 파일)
const express = require('express');
const mongoose = require('mongoose');
const postsRouter = require('./routes/posts');
const app = express();
mongoose.connect('mongodb://localhost:27017/exam_7');
mongoose.connection.on('connected', () => {
console.log('Successfully connected to MongoDB');
});
app.get('/', (req, res) => {
res.send('OK');
});
app.use('/posts', postsRouter);
app.listen(8080);