월 15,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
Schemaless 특성을 재생시 검은화면이 나와요
Schemaless 특성을 재생시 검은화면이 나와요 새로고침해도 같은 현상이 나오네요 ㅠ
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
user 내장 시 ref 필드 필요성
안녕하세요 !유익한 강의 감사합니다. Blog.js에서 BlogSchema를 보면,user를 내장하였는데,_id에 ref 필드가 그대로 있더라구요.사실 populate 하지 않을 꺼면 ref필드는 삭제해도 되지 않을까요?만약 내장하려는 문서에 ref가 필요한 케이스가 있다면 어떤 게 있을까요?
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
await 관련해서 질문드릴게 있습니다!!
안녕하세요 강사님 !! ㅎㅎ 강의 재밌게 듣고 있습니다. async await 방식이 코틀린의 코루틴과 굉장히 유사하다고 생각이 되는데 그럼 다음과 같이 Promise.all 대신 await를 늦추는 방식으로 풀어써도 똑같이 동작하나요?? async createBlog() => { await Promise.all([ Blog.insertOne({...}), // 1000ms User.UpdateOne({...}) // 1000ms ]) } // 실행시간 : 1000ms // 질문코드 async createBlog() => { const blogPromise = Blog.insertOne({...}) // 1000 ms const userPromise = User.updateOne({...}) // 1000 ms A(await blogPromise, await userPromise) } // 실행시간 : 1000ms(?)
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
섹션6의 3번째 강의 faker파일이 어디있나요?
전 강의에 올려놓으셨다고 하셨는데 Mongoose v6 업데이트 관련 공지만 있고 faker 관련 코드를 못 찾겠어서 질문 남깁니다.
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
$elemMatch 질문이 있습니다.
값을 찾을 때 $elemMatch 로 감싸줘야 둘 다 해당하는 값을 찾을 수 있다고 해주셨는데요.반대로, $elemMatch 를 쓰지 않으면 or 조건으로 검색이 된다고 이해했습니다. 여기서위와 같은 필터로 값을 검색 했을 때 username 이 Henry5522 이거나, title 이 ullam esse dolorem 인 모든 값이 필터 결과로 나와야 하는게 아닌가요?
- 해결됨mongoDB 기초부터 실무까지(feat. Node.js)
DB 업데이트에 실패했을 상황에서 대처는 어떻게 할 수 있나요.
await Promise.all([ comment.save(), Blog.updateOne({ _id: blogId }, { $push: { comments: comment } }), ]);위 코드에서comment.save() 는 정상적으로 동작해서 DB 에 입력이 되었지만 Blog.updateOne 은 알수 없는 오류로 실패가 떨어졌다면,데이터에 싱크가 맞지 않을 수 있을거 같은데요. comment.save 했던걸 되돌리거나 하는 처리가 있어야 할 거 같은데, 어떻게 처리할 수 있나요?
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
블로그에 user 데이터를 추가하는 방법에 대해서
읽는 시점에 populate 부분에 대한 시간도 최소화 하기 위해서 생성하는 시점에 user 의 최소한의 데이터를 넣어주고 있는거 같은데요.이렇게 접근하면, 화면 중심으로 모델이 설계가 되는게 아닐까요?요구사항이 바뀌거나, 다른 서비스에서 해당 API 를 사용하게 되면 매번 모델을 수정하고 데이터를 마이그레이션 해야 하는 이슈가 생길 수 있을거 같은데요.어떻게 생각하시나요?
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
blog 데이터 생성시 user 관련 오류
블로그 생성할 때 user 객체를 넣으면, 리턴 값으로 user 객체를 받을 수 있는 이점이 있다고 해서, 전달해봤는데요.아래와 같은 에러가 발생합니다.blog validation failed: user: Cast to ObjectId failed for value블로그 생성시 user 가 아닌 userId 를 전달하면 정상적으로 블로그가 생성되나, 리턴값에는 user 객체가 아닌 userId 가 매핑되어 있습니다.mongoose 버전이 올라가면서 변경된 사항이 있어서 발생한 이슈일까요?
- 해결됨mongoDB 기초부터 실무까지(feat. Node.js)
age 예외 처리를 별도로 하신 이유가 궁금합니다.
이미 Schema 정의 할 때 age 를 number 로 했기 때문에, 디비에 저장할 때 number 값을 전달하지 않으면 에러가 발생해서 catch 에서 처리할 수 있을거 같은데요.업데이트 전에 필드를 validation 하면 모든 필드에 대해서 일일히 다 해줘야 할 것 같은데, 그렇게 하는 이유가 있을까요?그리고, catch 에러에서 number 값을 입력하지 않아서 발생한 오류임을 알 수 있는 방법(e.g., 에러 코드)이 있나요?
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
delete 메소드가 많은 이유가 궁금합니다.
User.findOneAndDelete User.deleteOne User.findByIdAndDelete이렇게 많은 인터페이스를 제공해주는 이유가 있을까요?단순히 편의를 위한 것인지, 상황에 따라 골라쓰는게 성능적으로 좋은 것인지 궁금합니다.
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
unique validation 처리
unique 에서 중복이 발생하면 catch 에 잡히는데, 이 때 unique 에러 때문에 발생한 에러인지 어떻게 알고 케이스를 나눠서 클라이언트에게 전달 할 수 있을까요?
- 해결됨mongoDB 기초부터 실무까지(feat. Node.js)
updateMany에서 user._id를 못찾는 상황
강좌대로 Blog.updateMany({ "user._id": userId }, { "user.name": name })로 하니 블로그 데이터 유저 정보가 변경이 계속 안되고 있습니다 ㅠㅠ 유저 데이터는 정상적으로 변경이 되었는데요 문제점을 모르겠습니다.해당 코드 깃허브 : https://github.com/alinfanclub/KimDevlogServer/blob/updateMany/src/routes/userRouter.js 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 }); let user = await User.findById(userId); if (age) user.age = age; if (name) { user.name = name; await Blog.updateMany({ "user._id": userId }, { "user.name": name }); } await user.save(); return res.send({ user }); } catch (err) { console.log(err); return res.status(500).send({ err: err.message }); } });
- 해결됨mongoDB 기초부터 실무까지(feat. Node.js)
find() 가 리턴하는 instance member
nestjs + mongoose 조합이지만, https://velog.io/@modolee/mongodb-document-to-javascript-object와 같이 find()가 리턴하는 인스턴스 내부가 `_doc` 처럼 되어 있었습니다.저는 user.age 이렇게 사용하고 싶은데, user 밑에 age 라는 변수도 없고, 꼭 .toObject()를 해야 하나요?아직 이 부분에 수수께끼가 풀리지 않았습니다.설명해 주실 수 있나요?
- 해결됨mongoDB 기초부터 실무까지(feat. Node.js)
몽고 db를 백업방법을 부탁합니다.
mongodump로 로컬에 설치된 몽고 db를 백업하려 하는데 아래의 오류가 나옵니다.해결방법을 부탁합니다.- (mongodump.exe)를 별도로 다운받아야 하나요?-최신버전에는 mongodump.exe파일이 설치되어 있지 않습니다.[오류메세지]'mongodump'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는배치 파일이 아닙니다
- 해결됨mongoDB 기초부터 실무까지(feat. Node.js)
인덱스 생성시점
선생님, 안녕하세요! 좋은 강의 정말로 감사드립니다!이번 강의를 보면서, 궁금한 게 생겼는데요.이번강의에서 인덱스를 생성하면서, 탐색속도가 훨씬 빨라진다는 걸 알게되었습니다. 기존에 생성되어있는 (인덱스가 걸려있지 않은)데이터들에도 인덱스를 걸어주면 더 빨라지는 걸로 보이는데요. 그런데, 이번 강의에서 인덱스를 걸고 데이터를 생성하면, 인덱스를 걸지않았을 때보다 생성시간이 오래걸리는 부분이 있었습니다. 그렇다면 기존에 인덱스가 걸려있지않은 데이터들에 새로 인덱스를 걸 때는 기존 데이터들에 인덱스를 새로 걸어주는 건가요?
- 해결됨mongoDB 기초부터 실무까지(feat. Node.js)
$pull 문법에 대한 질문
선생님, 안녕하세요. 좋은 강의 너무 감사드립니다. 답변도 잘해주셔서 너무 감사드려요!이번 강의를 들으면서,Blog.updateMany( { "comments.user": userId }, { $pull: { comments: { user: userId } } } )이 구문이 나왔는데요. 여기서 updateMany의 첫번째 변수인{ "comments.user": userId },는 comments배열의 user가 userId인 객체를 찾는거고,{ $pull: { comments: { user: userId } } }여기서도 comments배열안의 user가 userId인 객체를 찾는 거라서, 사실상 같은거를 두번 써준 게 아닌가요??그래서 const [user] = await Promise.all([ User.findOneAndDelete({ _id: userId }), Blog.deleteMany({ "user._id": userId }), Blog.updateMany( { "comments.user": userId } // { $pull: { comments: { user: userId } } } ), Comment.deleteMany({ user: userId }), ]);이런식으로 updateMany의 두번째 변수만 Blog.updateMany( { "comments.user": userId } // { $pull: { comments: { user: userId } } } ),이런식으로 주석처리를 해줬습니다. 그러자 { "err": "Cast to ObjectId failed for value \"2023-07-03T10:17:04.313Z\" (type Date) at path \"user\" because of \"BSONError\"" }이런 에러가 나왔어요. 그래서 확인해보니, User.findOneAndDelete({ _id: userId }), Blog.deleteMany({ "user._id": userId }), Comment.deleteMany({ user: userId }),updateMany말고 다른 구문들은 다 실행이 됬더라구요. 그래서 user도 삭제되고 블로그도 삭제되고, comment도 삭제되었지만 blog안의 user가 작성한 comment는 pull되지 않아서 그대로 남아있었습니다. 그런데 여기서 궁금한게, promise.all로 묶어서 같이 실행하면, 하나라도 에러가 나면 바로 실행을 중단하고 에러를 배출한다고 배운 것 같은데, Blog.updateMany의 아래 구문인, Comment.deleteMany가 실행됬더라구요. 트랜잭션까지는 아니더라도 updateMany에서 에러가 나면 Comment.deleteMany는 실행이 안될 줄 알았는데, 이거까지 실행된 거를 보면, Promise.all에서는 전부 순서없이 비동기로 동시에?실행되는 걸까요?
- 해결됨mongoDB 기초부터 실무까지(feat. Node.js)
comment의 id가 생성되는 시점
선생님 안녕하세요. 강의 정말 잘듣고 있습니다. 감사드립니다.강의를 보다가 궁금한 점이 생겼는데요. 블로그에 코멘트를 넣을 때, 이렇게 했는데,const comment = new Comment({ content, user, blog }); await Promise.all([ comment.save(), Blog.updateOne({ _id: blogId }, { $push: { comments: comment } }), ]);저는 처음에 이걸 보고 comment 콜렉션에 들어가는 다큐먼트와 blog에 들어가는 comment의 Id 가 다를 거라고 생각했어요. comment의 id는 디비에 직접 삽입 된 후에 반환될 거라고 생각했습니다. 그래서 promise.all을 이용해 한번에 처리하는 게 아니라, 순차적으로 await을 붙여서 해줘야 한다고 생각했었는데요. 그런데 결과를 보니 comment의 id와 블로그에 들어가 있는 comment의 id가 같더라구요. 정말 신기했습니다. 그래서 궁금한게, comment의 id는const comment = new Comment({ content, user, blog });이 시점에서 생성되는 건가요? 아니면 다른 뭔가가 있을까요?? 궁금합니다~
- 해결됨mongoDB 기초부터 실무까지(feat. Node.js)
리팩토링 강의에서 라우터 리팩토링 전개연산자(...)
선생님 안녕하세요. 좋은강의 정말로 감사드립니다.리팩토링 강의에서 라우터들을 Index.js로 통합시켜줄 때 module.exports = { ...require("./userRouter"), ...require("./blogRouter"), ...require("./commentRouter"), }; 이렇게 전개연산자(...)를 작성해주셨는데요. 이유가 뭘까요? 이렇게 안하고 그냥 module.exports = { require("./userRouter"), require("./blogRouter"), require("./commentRouter"), }; 이렇게 해주려고 하니 에러가 발생하더라구요. 이유가 뭘까요??
- 해결됨mongoDB 기초부터 실무까지(feat. Node.js)
session.abortTransaction()에 대한 실제 예시 문의
아래 명령어를 통해 transaction이 실패했을 때 원복한다고 하는데, 저런 것은 catch문에 넣어야 하는 것이 맞나요? 아니면 if else로 문제점을 발견했을 때 처리하게 하는 걸까요?즉, 저 코드를 실제로 사용할 때, 어떤 모습으로 들어가는 지 궁금합니다.session.abortTransaction()
- 미해결mongoDB 기초부터 실무까지(feat. Node.js)
섹션9 Computed Fields 강의에서, 다음 강의 가기 전 빠진부분
이거 지워줘야합니다. 안그러면/:blgoId get 요청 할 때, "error": "commentCount is not defined"에러 나옵니다.또,여기 주석처리 풀어줘야합니다.안그러면 다음강의에서, comment Post 할 때"Cannot read properties of undefined (reading 'push')"에러나요.수업에서는 이부분에대한 조작없이 이미 되어있는 상태로 진행되고 나오지 않습니다.다른 분들은 이거 다 알아서 해결하고, 수업진행하신건가;; 에러나서 진행이 안될텐데;; 게시판에 질문들이 없네요. ㅡㅡ;