월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
안녕하세요 강의 잘 보고 있습니다 질문 하나 드립니다
이번 강의 내용은 아니지만 여러가지 해보다가 궁금해서 질문 드립니다 혹시 모델안에 배열이 있을 경우 배열안에 특정 id를 검색해서 그것만 수정하는 방법이 있을까요 ? 배열안에 추가는 $push와 삭제는 $pull로 잘 되는데... 수정하려고 보니 id 검색 후 배열 안의 객체 id를 또 검색해야 하는데 아무리 검색해봐도 방법을 모르겠네요 ㅠ.. 지금 모델 구조는 이렇게 되어있구요 const UserSchema = new mongoose.Schema({ username: { type: String, required: true, unique: true, }, name: { first: { type: String, required: true,}, last: { type: String, required: true, } }, age: Number, email: String, array: [ { name: { type: String } } ] }, { timestamps: true, }) 백엔드 코드는 이렇게 요청하고 있습니다 // test app.post('/api/user/test/:userId', async(req, res) => { try { const { userId } = req.params; const user = await User.findByIdAndUpdate(userId, { $push: { array: { name: req.body.name } } }, {new: true}) res.json(user) } catch(err) { console.log(err) } }) app.put('/api/user/test/:userId', async(req, res) => { try { const { userId } = req.params; const user = await User.findOneAndUpdate(userId, { // $pull: { //삭제 // array: { _id: '61c1f85f11fb31321cc79973' } // } }, { new: true }) res.json(user) } catch(err) { console.log(err) } }) 위에 코드는 삭제 코드인데 ..삭제는 조건만 적으면 되니 해당 아이디를 찾아서 pull이 됩니다 아이디를 찾아서 array안에 name 을 수정하고 싶은데 혹시 어떻게 해야 될까요 ?
- 해결됨mongoDB 기초부터 실무까지(feat. Node.js)
slice 질문 드립니다,,
안녕하세요 선생님 저번에 남긴 질문에 대한 해답을 못 구해 질문을 남깁니다. 제가 원하는 설계는 예를 들어, 유저 model에서 유저가 남긴 댓글들을 저장하는 array field를 만들고 이를 nesting으로 최신순 10개를 저장하는 것입니다. 이는 pagenation의 개수를 10개로 하려고 하기 때문입니다.그러면 유저의 마이페이지에서 유저가 남긴 댓글들을 보여주는 페이지에 들어간다면, 백엔드에서는 이에 관한 api의 로직을 유저 model을 한 번 호출하여 필요한 data를 프론트에 주도록 구현하였습니다.이러한 상황에서, 유저가 총 20개의 댓글을 남겼고 유저가 "유저가 남긴 댓글들을 저장하는 array field"에 저장된 댓글을 삭제 할 경우, 위의 api대로 작동한다면 최신순 10개의 댓글을 줄 수 있음에도 불구하고 9개밖에 주지 못하는 상황이 발생합니다.1) "유저가 남긴 댓글들을 저장하는 array field"의 개수를 삭제 연산이 진행되더라도 10개를 보장해주는 방법에 대해 감이 오질 않습니다..2) 삭제연산을 할 경우 개수를 보장해주길 원한다면 로직이 너무 까다로워지는데 nesting으로 설계하는 것이 과연 옳은가? 라는 생각이 듭니다.감사합니다..!
- 해결됨mongoDB 기초부터 실무까지(feat. Node.js)
slice의 문제점
안녕하세요 선생님.$slice 연산자를 사용하려고 구현해보니 몇가지 문제에 직면해서 조언을 얻고자 댓글을 남깁니다.1. $slice:-10으로 설정 할 경우, database array field에 가장 최근 것이 배열의 마지막 인덱스에 저장되는데 이를 unshift처럼 배열의 첫번째 인덱스에 가장 최신의 것을 저장하면서 $slice -10을 동시에 적용은 안되나요?왜냐하면 $slice:-10으로 설정 할 경우, 예를 들어 blog의 comment들을 최신순으로 정렬할 시, 첫 로딩시에는 front는 back에서 받은 data중 blog의 comment field를 역순으로 정렬을 구현할 것이고, pagenation을 할 시에는 sort({createdAt:-1})로 정렬을 했다면 정순으로 로직이 구현될텐데, 프론트에서 통일감있게 코드를 구현할 수 있게 하는게 맞는 방향인거 같아서요!이에 대한 해결책은 back에서 sort({createdAt:1})를 하는 방법일까요?2. $slice:-5로 설정하고 data를 삭제할 경우, 예를 들어 comment data는 총 10개가 있고(comment id는 1~10으로 가정) comment field에는 comment id가 6,7,8,9,10인 comment가 저장되있는데 여기서 comment id가 6인 data를 삭제한다면 comment field에는 comment id가 7,8,9,10인 data가 남게됩니다.이렇게 된다면 blog 화면에 첫 로딩 시, 최신순 5개의 댓글을 불러오고 싶은데 blog의 comment filed에 4개밖에 없으므로 5개의 댓글을 못 불러오게 됩니다.이에 대한 문제를 해결하기 위한 방법이 있을까요?감사합니다!
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
같은코드인데 에러가납니다.
{ "err": "The path 'comments' must exist in the document in order to apply array updates." } 모델은 강의코드와 같은상태이고 route 의 put부분도 똑같은 상태입니다. 해당에러로 구글링을 해보았지만 잘 이해가안되어서 질문을 드립니다 !! 혹시 이런경우에는 어떤것을 의심해야하나요? Blog Model에 comments 가 정상적으로 있는데 저 에러가 나서요...! userRouter.put('/:userId', async (req, res) => { try { const { userId } = req.params; if (!mongoose.isValidObjectId(userId)) return res.status(400).send({ err: 'invalid userId' }); const { age, name } = req.body; if (!age && !name) return res.status(400).send({ err: 'age or name is required' }); if (age && typeof age !== 'number') return res.status(400).send({ err: 'age must be a number' }); if (name && typeof name.first !== 'string' && typeof name.last !== 'string') return res.status(400).send({ err: 'first and last name are strings' }); // let updateBody = {}; // if(age) updateBody.age = age; // if(name) updateBody.name = name; // const user = await User.findByIdAndUpdate(userId, updateBody, { new: true }); const user = await User.findById(userId); if (age) user.age = age; if (name) { user.name = name; await Promise.all([ Blog.updateMany({ 'user._id': userId }, { 'user.name': name }), Blog.updateMany( {}, { 'comments.$[comment].userFullName': `${name.first} ${name.last}` }, { arrayFilters: [{ 'comment.user': userId }] } ), ]); } await user.save(); return res.send({ user }); } catch (err) { console.log(err); return res.status(500).send({ err: err.message }); }});
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
블로그 생성 후 응답 값에 id, _id 둘 다 나오는 이유가 궁금해요~
안녕하세요. 강사님! 강의 너무나 유익하게 잘 보고 있습니다! 오늘 궁금한건 아래와 같아요. 블로그 post api 응답값에 _id 와 id가 모두 나오는데 각각 로직의 어느 부분에서 나오게 된건지 궁금해요! { "blog": { "title": "Handmade title", "content": "Handmade content", "isLive": true, "user": { "_id": "615bd756d21a61989f312d16", "username": "Bettye.Prosacco595", "name": { "first": "Marley", "last": "Leuschke" } }, "_id": "615ea22b706c8fa1ae8e3950", "createdAt": "2021-10-07T07:30:51.545Z", "updatedAt": "2021-10-07T07:30:51.545Z", "__v": 0, "id": "615ea22b706c8fa1ae8e3950" } }
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
두번째 이후 후기들은 왜 관계형인것인가요?
강의감사합니다. 질문이있습니다. 후기의 첫페이지는 조건이필요없으므로, 내장으로 처리를하고, 이후 페이지들은 다양한 조건들이 필요하므로 관계형으로 처리를 한다고 이해하면 될까요?
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
virtual에 대해 질문이있습니다.
좋은 강의 감사합니다. virtual 을 써야할때와 , user처럼 관계를 줄때를 어떻게 구분하면 되는건가요?? 이부분에 대한 설명이 없어서 언제/왜 써야하는지를 알고싶습니다.
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
mongoose vs mongodb nodejs driver
https://www.mongodb.com/developer/article/mongoose-versus-nodejs-driver/ 위 글을 보면 애플리케이션 레이어에서 스키마를 강제하는 mongoose를 사용하는 것 보다 mongodb레이어에서 스키마를 강제하는 방법을 이용하며 mongodb nodejs driver를 사용하는게 변경에 유연하다며 추천해주는 내용이 있습니다. 저는 mongodb를 실무에서 써본 경험이 없어 위 글에 대한 강의자님의 의견이 궁금해서 질문드려요!!
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
질문 있습니다.
블로그 모델에 유저를 참조만 하는게 아니라 username, name 등 필드를 직접 추가했잖아요. 그러면 작성한 유저가 닉네임이나 이름을 변경하면 지금까지 작성한 블로그랑 코멘트의 닉네임과 이름을 다 찾아서 수정해줘야 하나요? 전에 강의에서 봤던 populate 같은 경우에는 _id로 참조하고 있는 유저 정보를 가져오니까 특별히 문제가 될 거 같진 않은데 지금처럼 자체적으로 필드를 추가했을 때는 어떻게 처리를 해야 하나요? 혹시 뒤에 관련 강의가 있나요? 있다면 죄송합니다.. 이번 강의 듣고 궁금해서 질문드립니다.
- 해결됨mongoDB 기초부터 실무까지(feat. Node.js)
하나만 더 질문드릴게요!
아까의 답변으로 한참 고생했던게 해결됬습니다. 제가 JS를 시작한지 얼마 안되서 사용법을 잘 모르겠는데 예를들어 let user = {}; user.id = 123; 을 입력하면 user = { id: 123} 이렇게 잘 나옵니다. 그리고 mongoose에서 user 문서 내부의 info Object안에 있는 id를 변경할 때에는 $set {"info.id" : ~~~} 이런식으로 변경하는걸로 알고있습니다. 그걸 updateBody 안에 모아서 한번에 쏴주고싶은데 어떤 식을 써야 updateBody = { "info.id": ~~ } 이같은 형식의 데이터가 만들어지는지 모르겠습니다. 제가 시도한 코드 let updateBody = {}; updateBody."info.id" = 123 -실패 updateBody.push({ "info.id": 123}) , updateBody.insert({ "info.id": 123}) 또한 실패했습니다.
- 해결됨mongoDB 기초부터 실무까지(feat. Node.js)
질문있습니다!
우선 마른 사막에 단비같은 강의 정말 잘보고있습니다. 강의 듣기전에는 혼자서 하느라 얼마나 고생했는지 몰라요ㅠㅠㅠ 각설하고 제가 스타트업으로 개발을 하고있는데 막히는 부분이 있습니다. 예를들어 users라는 스키마에 { id: 12, name: '형돈', freind: [{ id:81, name:'홍철' }, { id:66, name:'재석 }] } 이라는 Document가 존재합니다. 제가 하고싶은건 id가 12인 document를 찾고서, document 내부 freind 배열에서 id가 66인곳에 {name: '명수'} 로 수정하고싶은데 어떻게 해야할지 잘 모르겠습니다. 제가 막히는 부분 =>> user.findOneAndUpdate({ id:12, "freind.id": 66 }, { $set: { "freind.name": "명수" } }) 이렇게 해봤는데 값이 수정되지 않습니다.ㅠㅠ 답변 기다리겠습니다.
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
error)선생님 깃허브에 올렸습니다.코드 체크 부탁드립니다^^
https://github.com/elvoinc2018/pat-clone-01 3:30 부분에서 Error: blog validation failed: user.name.last: Path `user.name.last` is required., user.name.first: Path `user.name.first` is required., user.username: Path `user.username` is required., user._id: Path `user._id` is required.
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
error) 질문있습니다.
await generateFakeData(10, 1, 10); Error: blog validation failed: user.name.last: Path `user.name.last` is required., user.name.first: Path `user.name.first` is required., user.username: Path `user.username` is required., user._id: Path `user._id` is required. at ValidationError.inspect (/Users/elvoinc/Documents/Build/Dev/mongodb/node_modules/mongoose/lib/error/validation.js:48:26
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
질문 있습니다^^
comment post api 수정하기 3:30 부분에서 'user.username': ValidatorError: Path `user.username` is required. 'user._id': ValidatorError: Path `user._id` is required. 이런 에라가 뜹니다.난감합니다^^
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
AWS lightsail 공인 ip 등록 관련
안녕하세요, 회사 ip주소에 테스트용으로 aws를 붙이려고 합니다. Bring your one IP 라고 해서 BYOIP로 aws에 공인 ip 주소를 할당할 수 있는 것 같은데요, 찾아보니 aws의 경우에는 ip 주소 range를 적어주고, 더 세부적으로 체크를 한다고 하는데, 단일 kt나 skt에서 받은 공인 ip로 aws lightsail에 적용이 가능할까요?
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
post 요청시 content-type 설정
다음 강의에서 추가 안내가 있었으면 합니다. 위치 : Node.js & Express를 활용한 REST API 만들기 / Express Middleware post 전송시 header 정보에 content-type=application/json 을 명시하지 않으면 데이터가 넘어가지 않습니다. 간단한 header 정보의 설명도 있었으면 합니다.
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
업데이트 시 질문
강의에서 age 와 name 을 업데이트 해줄 때 updatedBody.age = age updatedBody.name = name 이런 방식으로 하나하나 할당해주는데, 만약 할당해야할 속성이 너무 많은 경우에는 문제가 될거같아서 Object.assign(updatedBody, req.body)이런식으로 넣어도 괜찮은걸까요?
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
MySQL도 속도테스트가 가능할까요?
안녕하세요. 강의 중에 몽고디비 아틀라스로 Index 속도 테스트와 Papulate를 사용하여 쿼리문의 수를 줄였을 때의 속도를 측정하는 것이 인상적이었습니다. MYSQL에서도 이렇게 DB 속도에 대한 측정이 가능한 방법이 있을까요? 몽고디비와 SQL의 CRUD에 대한 속도차이를 테스트하고 싶습니다.
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
transaction 제거 후 코드가 성공한 이유
안녕하세요, 선생님 초반에 transaction을 제거하고 성능을 높이는 방법을 보여주셨는데, transaction을 적용하기 이전의 코드와 1:52초 즈음에 알려주시는 코드의 차이가 궁금합니다. mongodb에서 직접 수정을 하냐 아니면 nodejs로 데이터를 가져와서 조작을 하냐의 차이 때문에 성공 실패가 갈리는거죠? 제 생각에는 아무래도 nodejs로 데이터를 가져온 상태에서 조작을 한다면, 조작해서 저장하는 시점엔 데이터베이스의 내용이 달라져서 덮어씌워지는 건데, 반대로 직접 데이터베이스에서 조작하면 항상 데이터베이스의 현재 내용물을 조작하니깐 일관성이 생기는거죠. 제가 잘 이해한게 맞을까요?
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
session.abortTransaction 명시
안녕하세요, 선생님. 공부하다가 궁금한게 생겨서 질문드립니다. transaction이 Atomicity를 유지할 수 있도록 abortTransaction을 쓰는 것 같은데, transaction의 에러 처리 부분에서 반드시 명시해줘야하는거죠? 혹시 {session}을 명시해준 mongoose api 중 하나라도 실패한다면 이전 것들이 자동으로 롤백되는 것이 아니라 abortTransaction을 명시해줘야 롤백되는건지 궁금합니다.