Mongoose 및 Node.js와 관계를 만드는 방법(실제 예제 포함)
23142 단어 nodenosqljavascriptmongo
_id
를 한 컬렉션에서 다른 컬렉션으로 저장합니다({type: mongoose.Schema.Types.ObjectId,ref:'NameOfSchema'}
). 관련된 데이터는 populate()
메서드로 선택합니다.예제의 아이디어
Users
등록을 허용하고 이러한 사용자가 만들 수 있는 시스템Posts
이 될 것입니다.필수 종속성
"body-parser": "^1.19.0",
"cors": "^2.8.5",
"express": "^4.17.1",
"mongoose": "^5.7.5",
"nodemon": "^1.19.4"
프로젝트 구조
├── index.js
const express = require('express');
const cors = require('cors');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const app = express();
// middlewares
app.use(cors());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
mongoose.connect('mongodb://localhost:27017/relationships',{
useNewUrlParser: true,
useUnifiedTopology: true
})
// routes
app.use(require('./app/routes'));
app.listen(3000, () => console.log('server on!'));
├── 모델
└── user.js
const mongoose = require('mongoose');
const UserSchema = new mongoose.Schema({
name :{
type:String,
required: '{PATH} is required!'
},
bio: {
type:String
},
website:{
type:String
},
posts : [
{type: mongoose.Schema.Types.ObjectId,ref:'Post'}
]
},{
timestamps: true
})
module.exports = mongoose.model('User',UserSchema);
├── 모델
└── post.js
const mongoose = require('mongoose');
const PostSchema = new mongoose.Schema({
title:{
type:String,
required: '{PATH} is required!'
},
subtitle :{
type: String
},
user :{
type:mongoose.Schema.Types.ObjectId,
ref:'User'
}
},{
timestamps:true
})
module.exports = mongoose.model('Post',PostSchema);
└── user.js ( 컨트롤러 )
const User = require('../../models/user');
module.exports = {
create : async (req, res) =>{
const { name, bio, website } = req.body;
const user = await User.create({
name,
bio,
website
})
return res.send(user)
},
find : async (req, res) => {
const user = await User.find()
return res.send(user)
},
postsByUser : async (req, res) => {
const { id } = req.params;
const user = await User.findById(id).populate('posts');
res.send(user.posts);
}
}
const user = await User.findById(id).populate('posts')
는 다음과 같습니다. user.posts.forEach(async element => {
const post = await Post.findById(element);
console.log(post);
});
└── post.js ( 컨트롤러 )
const Post = require('../../models/post');
const User = require('../../models/user');
module.exports = {
create : async (req, res) => {
console.log(req.params);
user = req.params;
id = user.id;
const { title, subtitle} = req.body;
const post = await Post.create({
title,
subtitle,
user:id
});
await post.save();
const userById = await User.findById(id);
userById.posts.push(post);
await userById.save();
return res.send(userById);
},
userByPost : async (req,res)=>{
const { id } = req.params;
const userByPost = await Post.findById(id).populate('user');
res.send(userByPost);
}
}
└── route.js
const express = require('express');
const router = new express.Router;
const User = require('./controllers/user/user');
const Post = require('./controllers/post/post');
router.get('/',(req,res)=>res.send('ok'));
// user routes
router.post('/user/create',User.create);
router.post('/user/find',User.find);
router.post('/user/find/post/:id', User.postsByUser);
// post routes
router.post('/post/create/:id', Post.create);
router.post('/post/populate/:id',Post.userByPost);
module.exports = router;
└── package.json 구성
프로젝트에서 nodemon을 사용하려면 "스크립트"에서 "시작"키를 설정하고 nodemon 명령과 응용 프로그램 루트 파일 이름을 전달합니다.
"scripts": {
"start": "nodemon index.js"
},
그런 다음 터미널에서 "npm start"명령을 실행하면 프로젝트의 파일이 변경될 때마다 응용 프로그램이 서버를 다시 시작하므로 개발 생산성이 향상됩니다.
최종 결과
thanks for everything!
😄
Reference
이 문제에 관하여(Mongoose 및 Node.js와 관계를 만드는 방법(실제 예제 포함)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mkilmer/how-create-relationships-with-mongoose-and-node-js-with-real-example-43ei텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)