Node.js 환경에서 사용하는 MongoDB기반의 ORM 라이브러리입니다.
ORM
: (Object Relational Model)으로 객체를 모델으로 맵핑해주는 것을 의미connect()
를 이용해서 연결함
import mongoose from "mongoose";
// uri예시) mongodb://username:password@host:port/database?options...
const uri = "mongodb://localhost:27017";
// option값에 useNewUrlParser없으면 오류
const options = {
useNewUrlParser: true,
}
mongoose
.connect(uri, options)
.then(() => console.log("몽고디비 연결 성공!"))
.catch(console.error);
데이터베이스의 모델의 형태의 구조를 정의한 것이라고 생각함
비유를 해보자면 class가 schema이고, object가 model인것 같음
import mongoose, { Schema } from "mongoose";
// 유저스키마 즉, 유저테이블의 형태를 선언함
const UserSchema = new Schema({
username: {
type: String,
required: true,
},
password: String,
createdAt: {
type: Date,
default: Date.now(),
},
});
// type => String, Number, Boolean, Date 등이 있음
// 모델생성
// 두 번째 인자로 받은 스키마를 기반으로 모델생성... 실제 DB에는 "users"이름의 모델이 생성됨
const User = mongoose.model("User", UserSchema);
export default User;
save()
사용
// 위에서 export default User; 했던 User
const user = new User({ username: "testUser", password: 1234 });
// user는 자바스크립트에서 생성한 user이고, save()사용시 데이터베이스에 생성됨
user.save().then(() => console.log("저장 완료"));
스키마의 메서드를 정의
UserSchema.statics.staticMethod = function () {
// this는 스키마 자체를 가리킴... 자체적으로 가지는 findById(), findByIdAndDelete() 등을 사용 가능
console.log("User클래스의 메소드 >> ", this);
};
스키마의 메서드를 정의
UserSchema.methods.objectMethod = function () {
// this는 생성한 객체를 가리킴
console.log("user객체의 메소드 >> ", this);
};
특정 메서드 호출 이전에 호출
UserSchema.pre("save", function (next) {
console.log("save()이전에 호출 >> ", this);
// next()안하면 호출한 특정 메서드로 넘어가지 않음
next();
});
특정 메서드 이후에 호출
UserSchema.post("save", function (result) {
console.log("save()이후에 호출 >> ", result);
console.log("save()이후에 호출 this >> ", this);
});
const mongoose = require("mongoose");
const { Schema } = mongoose;
(async () => {
await mongoose.connect("mongodb://localhost:27017/test", {
useNewUrlParser: true,
});
const UserSchema = new Schema({
username: {
type: String,
required: true,
},
password: String,
createdAt: {
type: Date,
default: Date.now(),
},
});
UserSchema.statics.staticMethod = function () {
console.log("User클래스의 메소드 >> ", this);
};
UserSchema.methods.objectMethod = function () {
console.log("user객체의 메소드 >> ", this);
};
UserSchema.pre("save", function (next) {
console.log("save()이전에 호출 >> ", this);
next();
});
UserSchema.post("save", function (result) {
console.log("save()이후에 호출 >> ", result);
console.log("save()이후에 호출 this >> ", this);
});
const User = mongoose.model("User", UserSchema);
const user = new User({ username: "testUser", password: 1234 });
console.group("start");
User.staticMethod();
user.objectMethod();
await user.save();
console.groupEnd();
console.log("끝");
})();
findById()
findByIdAndDelete()
등의 사용법 추가로 업로드 예정