Document,key-value,Graph가 있다. 그 중에서 MongoDB의 경우 Document에 속한다.column과 row 기반이 아닌, JSON형태로 원하는 어떤 종류의 형태와 모양으로 데이터를 저장이 가능하다.
npm install mongoose
importconnect 메소드를 사용한다.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하지 않는다.