const mongoose = require('mongoose')
mongoose.connect("mongodb://127.0.0.1:27017/UserAPI")
.then(() => {
console.log("Connected to MongoDB => UserAPI");
})
.catch((err) => {
console.log(err);
});
const mongoose = require('mongoose')
const {Schema} = require('mongoose')
const UserSchema = new Schema({
user_id: {
required: true,
unique: true,
type: String,
},
password: {
required: true,
type: String,
},
salt: {
required: true,
type: String,
},
email: {
required: true,
type: String,
unique: true,
}
})
mongoose.model('users', UserSchema)
조건에 맞는 모든 값을 찾기
userModel.find({user_id: 'admin'}).then((docs) => {
console.log(docs)
})
또는
userModel.find({user_id: 'admin'}, (err,docs) => {
console.log(docs)
})
userModel.findOne({user_id: 'admin'}).then((docs) => {
console.log(docs)
})
userModel.findById("621b574ff0bfe6d32b330505").then((docs) => {
console.log(docs)
})
const userInfo = {
user_id: req.body.user_id,
salt: salt,
password: hash.cryptoPassword(req.body.password, salt),
email: req.body.email,
}
const newUser = await new userModel(userInfo)
newUser.save((err) => {
if (err) {
console.log("POST : 유저 생성 실패")
return res.status(500).json({
message:create failed: ${err}
})
}
console.log(newUser)
res.status(200).json({
message: "create succeed"
})
})
const userInfo = {
user_id: req.body.user_id,
salt: salt,
password: hash.cryptoPassword(req.body.password, salt),
email: req.body.email,
}
userModel.create(userInfo, (err) => {
if (err) {
console.log("POST : 유저 생성 실패")
return res.status(500).json({
message:create failed: ${err}
})
}
console.log(userInfo)
res.status(200).json({
message: "create succeed"
})
})
const post = await postModel.findOne({title: req.params.title})
if (!post) {
console.log("삭제할 게시글이 없습니다. ")
return res.status(500).json({message: "None Data"})
}
postModel.deleteOne(post, (err) => {
if (err) {
return console.log(err);
}
console.log("삭제 성공")
})
postModel.updateOne(post, updatePost, (err) => {
if (err) {
console.log(포스트 수정 실패 => ${err}
)
return res.status(500).json({message: "Update Failed"})
}
console.log("포스트 수정 성공")
res.status(200).json({
message: "Update Success",
data: {updatePost}
})
}
Schema 설정
const postSchema = new Schema({
title: {
type: String,
required: true,
},
body: {
type: String,
required: true,
},
author: {
type: Schema.Types.ObjectId,
ref: "users",
index: true,
required: true,
},
time: {
type: Date,
default:getDate()
}
,
})
위 코드의 author 부분에 type이 Schema.Types.ObjectId 인 것을 볼 수 있습니다.
이건 users모델의 id를 가져오기 위한 타입 설정이며, 이를 위해 ref에 연결한 모델의 이름을 작성해줍니다.
{
_id: "621b827c92b350447277a06e",
title: "수정 테스트",
body: "성공해람",
author: "621b574ff0bfe6d32b330505",
time: "2022-02-28T20:14:57.865Z",
__v: 0
},
populate 하기 전 데이터를 확인해보면 author 안에 ObjectId타입으로 데이터가 들어가 있는 것을 확인할 수 있습니다.
이 데이터를 이제 사용할 수 있도록 펼치기 위해 populate를 사용하게 됩니다.
try {
const user = await userModel.find({user_id: req.params.author})
postModel.find({author: user}).populate('author').then((post) => {
res.status(200).json(post)
})
} catch (e) {
console.log(검색 실패 => ${e}
)
res.status(500).json({message: "search Failed"})
}
{
_id: "621b827c92b350447277a06e",
title: "수정 테스트",
body: "성공해람",
author: {
_id: "621b574ff0bfe6d32b330505",
user_id: "admin",
password: "30b55922e2cd2752a859b4e2294b10cd47192c5c8f9174b39c4aaf28837d16de",
salt: "b5676ff2b24934a33005986e88ce838fdba6197cdef40dfbf23fa40ad36ddafc",
email: "test@example.ocm",
v: 0
},
time: "2022-02-28T20:14:57.865Z",
v: 0
}