Document
,key-value
,Graph
가 있다. 그 중에서 MongoDB의 경우 Document
에 속한다.column
과 row
기반이 아닌, JSON형태로 원하는 어떤 종류의 형태와 모양으로 데이터를 저장이 가능하다.
npm install mongoose
import
connect
메소드를 사용한다.import mongoose from 'mongoose'
mongoose.connect(`localhsot:${port}/${db이름}`,{
// 옵션
useNewUrlParser:true // mongoDB v5부터는 true로 추가해야한다.
// url을 parsing할 떄, 새로운 parser를 사용하는 것
})
const db = mongoose.connection
db.on("error", (error)=>console.log(error))
db.once("open", ()=>console.log("open"))
Mongoose.connection
은 Mongoose로 연결한 첫 번째 연결connection.on()
/ connection.once()
는 Event Emitter 계열의 이벤트 Listenmongoose
를 import
한 뒤, new mongoose.Schema()
를 통해 생성이 가능하다.
const userSchema = new mongoose.Schema(
{
username: {
type: String,
required: true,
unique: true,
},
displayName: {
type: String,
required: true,
},
password: {
type: String,
required: true,
select: false,
},
// 암호화할 때 랜덤한 값을 생성하도록
salt: {
type: String,
required: true,
select: false,
},
},
);
const userModel = mongoose.model("User", userSchema);
Mongoose.populate()
는 다른 collections
의 data를 참조핧 때 사용한다.MongoDB
에서는 JOIN이 없기 때문에, 이러한 방식으로 참조를 한다. mongoose.Schema.Types.ObjectId
로 설정해야한다.ObjectId
: MongoDB에서 Collection
에 data를 넣을 떄 자동으로 부여한다.ref
: 해당 ObjectID로 어떤 model을 참조할 것인지 나타낸다.export default mongoose.model(
// Review 모델을 정의
"Review",
// Review 스키마 정의
mongoose.Schema(
{
user: {
type: Schema.Types.ObjectId,
ref: "User", // User 모델 참조
required: true,
},
content: {
type: String,
required: true,
},
mediaType: {
type: String,
enum: ["tv", "movie"],
required: true,
},
mediaId: {
type: String,
required: true,
},
mediaTitle: {
type: String,
required: true,
},
mediaPoster: {
type: String,
required: true,
},
},
modelOptions
)
);
const reviews = media.reviews = await reviewModel.find({ mediaId }).populate("user").sort("-createdAt");
데이터의 조회하는 방식을 의미한다.
비동기 함수이므로, async, await, then(), callbcak
등을 사용하여 코드 실행 순서를 반드시
보장해야한다.
Model.create({...})
save()
: 객체를 새로 만들고 저장한다.
Model.find({...}) : 조건에 부합하는 documents를 **모두** 불러온다. - firebase의
getDocs`와 유사하다.Model.findOne({...})
: 조건에 부합하는 documents 중 하나만 불러온다.getDoc
과 유사하다.Model.findByIdAndUpdate({...})
: 해당 id의 documents를 불러와서 갱신하도록 한다.cousrModel.findByIdAndUpdate(
id,
{classTime:"Mon E, Web E"}
):
Model.updateOne({...})
: 조건에 부합하는 document를 불러와서 갱신한다.coursModel.updateOne(
{_id:id},
{ coursName : "Open Source"}
)
Model.findOneAndDelete({...})
: 조건에 부합하는 document중 하나만 삭제한다. 삭제할 데이터를 returnModel.deleteOne({...})
: 조건에 부합하는 document중 하나만 삭제한다. 삭제할 데이터를 return하지 않는다.