Object Data Model
몽고DB의 Collection을 모델화 시켜주며
다양한 기능을 제공하여 관리하기 편하게 해줌
nodejs 에서 제공해주는 기본 몽고DB 연결 상태 관리가 좋지않아
Mongoose 을 사용하면 손쉽게 연결상태를 관리 할수있다
몽고DB가 NoSQL 언어라서 스키마가 없는게 개발 시 불편할수 있는데
Mongoose 에서 코드레벨에서 스키마를 제공하여 용이함
몽고DB에서는 기본적으로 조인을 제공하지않아 aggregate라는 방식으로
어렵게 조인을 해야하는데 Mongoose 에서 제공해주는 populate를 사용하면 손쉽게 가능
스키마 생성 new Schema({
test: String
})
RDMS와 비유하면 테이블을 미리 생성해두는 거라 생각하면 될듯
데이터 들어올때 속성 타입을 확인하여 맞지 않는 타입의 데이터가 들어올 경우 에러를 발생시킴
모델 생성 mongoose.model('test', new Schema({
test: String
}))
model 함수를 사용하여 손쉽게 연결 가능
데이터 베이스 연결 mongoose.connect('mongoDB://127.0.0.1/mongo');
connect 함수로 연결
mongoose 는 자동으로 연결을 관리하기 때문에
추후에 model 관련 작업 시 연결 확인을 하지않아도 자동으로 연결 확인 후 작업을 진행함
connect는 하나의 데이터베이스에만 연결이 가능하므로
createConnection을 사용하는것을 추천
https://dev.to/maixuanhan/stop-using-the-mongoose-s-default-connection-4nnj
const testModel = require('./test');
testModel.create({
test: 1,
test1: 2
});
create 키워드로 document 생성 가능
updateOne, updateMany, findByIdAndUpdate, findOneAndUpdate
update~ 로 시작하는 명령어는 업데이트 결과를 리턴
find~ 로 시작하는 명령어는 업데이트 후 해당하는 document를 리턴
기본적으로 $set 키워드와 같이 사용 (document 전체를 업데이트 하지 않기때문에)
Mongo DB에서 직접 업데이트 할때는 document 전체 업데이트 가능
find, findById, findOne
~One 이 붙은 명령어는 단건, 안붙은 명령어는 여러개를 조회한다
~Id 가 붙은 명령어는 id를 이용하여 검색
const testModel = require('./test');
testModel.find({ test: 1 });
testModel.findById({ _id: "11" });
deleteOne, deleteMany, findByIdAndDelete, findOneAndDelete
find 로 시작하는 명령어는 document를 반환해줌
$lt, $lte, $gt, $gte 키워드를 사용하여 range query 로 사용
$in, $or 쿼리를 이용하여 where in, or 처럼 사용 가능
test: ['test', 'test1'] === test: { $in: ['test', 'test1'] }
배열로 넘겨줄 경우 자동으로 $in으로 변경되어 처리된다.