• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

pull not working

21.04.29 01:05 작성 조회수 108

2

안녕하세요!

항상 강의 잘 듣고 있습니다.

감사합니다. 질문이 너무 많은 거 같아 죄송하네요..

저같은 경우에는 comment schema의 user를 사진과 같이 구현하였습니다.

그렇기에 { $pull: { comments: { user: { _id: mongoose.Types.ObjectId(userId) } } } } 이와 같이 filter를 주었습니다.

그런데 pull이 작동을 하지 않습니다.  즉, 블로그의 comments의 해당 user가 남긴 댓글이 남아있습니다.

해결 방안을 찾기 위해 많이 고민해보았지만 방법을 찾지 못하고 질문을 남깁니다.

위 사진은 mongoose debug 내용과 blog를 console로 찍은 사진입니다.

또한 저의 깃허브 주소도 첨부하겠습니다. https://github.com/onejaejae/learn_mognoDB

감사합니다 :)

답변 2

·

답변을 작성해보세요.

0

아 강의에서 보여드렸던 스키마와 다르네요.

{ $pull: { comments: { "user._id": userId } } }

보여주신 스키마의 경우 이렇게 해주시면 됩니다.

강의에서는 제 기억으로 중간에 스키마를 변경했던거 같아요. "User 삭제하기"의 전 강의에 몽고디비 컴파스로 블로그를 조회하는데요. 여기서 보면 blog의 comments의 user에 user객체를 저장하지 않고 userId를 저장했어요. 그래서 { $pull: { comments: { user: userId } } }로 해도 됬었습니다. 여러가지 경우를 보여드리려고 스키마를 수정하다보니 혼선이 있었던거 같아요! 만약 user가 단일 필드가 아니고 객체이면 위에 언급했던 방식으로 $pull 하시면 되구요. 객체 안에 여러 필드를 조건으로 할거면 arrayFilter 사용하시면 됩니다!

그리고 탐색할 때 mongoose.Types.ObjectId(userId) 이런식으로 변환 작업을 안해줘도 됩니다! mongoose가 알아서 변환 해줍니다 :)

Dev님의 프로필

Dev

질문자

2021.05.06

말씀대로 하니 잘 작동되네요 :)

감사합니다!!

0

Dev님 안녕하세요 :)

음 $pull: {"comments.user._id": userId } 이렇게 해보실 수 있나요?

Dev님의 프로필

Dev

질문자

2021.05.06

위와 같이 변경하여 진행하였더니 아래와 같은 에러가 발생합니다.

{

    "message": "Cannot use the part (user) of (comments.user._id) to traverse the element ({comments: [ { user: { name: { first: \"Arnold\", last: \"Simonis\" }, _id: ObjectId('6086de580c64a50f5ca5a1c4'), username: \"Jimmie.Morar28\" }, _id: ObjectId('6086de620c64a50f5ca5a381'), content: \"Ullam tempore et et temporibus.\", blog: ObjectId('6086de5a0c64a50f5ca5a290'), updatedAt: new Date(1619451490855), createdAt: new Date(1619451490855) }, { user: { name: { first: \"Melissa\", last: \"Armstrong\" }, _id: ObjectId('6086de580c64a50f5ca5a1c5'), username: \"Lula_Roberts56\" }, _id: ObjectId('6086de620c64a50f5ca5a387'), content: \"Accusantium aliquid ipsum velit.\", blog: ObjectId('6086de5a0c64a50f5ca5a290'), updatedAt: new Date(1619451490878), createdAt: new Date(1619451490878) }, { user: { name: { first: \"Melissa\", last: \"Armstrong\" }, _id: ObjectId('6086de580c64a50f5ca5a1c5'), username: \"Lula_Roberts56\" }, _id: ObjectId('6086de630c64a50f5ca5a38d'), content: \"Fugiat perferendis esse autem eaque consequatur et ab voluptatum.\", blog: ObjectId('6086de5a0c64a50f5ca5a290'), updatedAt: new Date(1619451491239), createdAt: new Date(1619451491239) }, { user: { name: { first: \"Kailee\", last: \"Skiles\" }, _id: ObjectId('6086de580c64a50f5ca5a1c7'), username: \"Ressie_Ernser433\" }, _id: ObjectId('6086de630c64a50f5ca5a3ab'), content: \"Quasi ratione rerum occaecati totam.\", blog: ObjectId('6086de5a0c64a50f5ca5a290'), updatedAt: new Date(1619451491612), createdAt: new Date(1619451491612) }, { user: { name: { first: \"Garrick\", last: \"Marks\" }, _id: ObjectId('6086de580c64a50f5ca5a1c9'), username: \"Johnathan_Harber60\" }, _id: ObjectId('6086de630c64a50f5ca5a3cd'), content: \"Aut sit hic et eveniet reprehenderit ducimus aut.\", blog: ObjectId('6086de5a0c64a50f5ca5a290'), updatedAt: new Date(1619451491828), createdAt: new Date(1619451491828) }, { user: { name: { first: \"Gerardo\", last: \"Rippin\" }, _id: ObjectId('6086de580c64a50f5ca5a1ca'), username: \"Olin1175\" }, _id: ObjectId('6086de640c64a50f5ca5a3d9'), content: \"Autem et est nihil perspiciatis vero vel molestias ut.\", blog: ObjectId('6086de5a0c64a50f5ca5a290'), updatedAt: new Date(1619451492059), createdAt: new Date(1619451492059) }, { user: { name: { first: \"Gerardo\", last: \"Rippin\" }, _id: ObjectId('6086de580c64a50f5ca5a1ca'), username: \"Olin1175\" }, _id: ObjectId('6086de640c64a50f5ca5a3f1'), content: \"Delectus autem magni qui quibusdam ea eum.\", blog: ObjectId('6086de5a0c64a50f5ca5a290'), updatedAt: new Date(1619451492229), createdAt: new Date(1619451492229) }, { user: { name: { first: \"Raquel\", last: \"Carter\" }, _id: ObjectId('6086de580c64a50f5ca5a1cb'), username: \"Lazaro.Dietrich98\" }, _id: ObjectId('6086de640c64a50f5ca5a3ff'), content: \"Est quis hic molestiae culpa ab eum corrupti assumenda.\", blog: ObjectId('6086de5a0c64a50f5ca5a290'), updatedAt: new Date(1619451492365), createdAt: new Date(1619451492365) }, { user: { name: { first: \"Raquel\", last: \"Carter\" }, _id: ObjectId('6086de580c64a50f5ca5a1cb'), username: \"Lazaro.Dietrich98\" }, _id: ObjectId('6086de640c64a50f5ca5a403'), content: \"Aut aut sed harum.\", blog: ObjectId('6086de5a0c64a50f5ca5a290'), updatedAt: new Date(1619451492383), createdAt: new Date(1619451492383) }, { user: { name: { first: \"Orlo\", last: \"Prohaska\" }, _id: ObjectId('6086de580c64a50f5ca5a1cc'), username: \"Berniece4095\" }, _id: ObjectId('6086de640c64a50f5ca5a407'), content: \"Doloribus officiis vel expedita rerum repellendus aliquam.\", blog: ObjectId('6086de5a0c64a50f5ca5a290'), updatedAt: new Date(1619451492398), createdAt: new Date(1619451492398) }, { user: { name: { first: \"Orlo\", last: \"Prohaska\" }, _id: ObjectId('6086de580c64a50f5ca5a1cc'), username: \"Berniece4095\" }, _id: ObjectId('6086de640c64a50f5ca5a409'), content: \"Placeat nostrum rerum commodi mollitia.\", blog: ObjectId('6086de5a0c64a50f5ca5a290'), updatedAt: new Date(1619451492404), createdAt: new Date(1619451492404) }, { user: { name: { first: \"Orlo\", last: \"Prohaska\" }, _id: ObjectId('6086de580c64a50f5ca5a1cc'), username: \"Berniece4095\" }, _id: ObjectId('6086de640c64a50f5ca5a40f'), content: \"Voluptas et sed sed.\", blog: ObjectId('6086de5a0c64a50f5ca5a290'), updatedAt: new Date(1619451492500), createdAt: new Date(1619451492500) }, { user: { name: { first: \"Orlo\", last: \"Prohaska\" }, _id: ObjectId('6086de580c64a50f5ca5a1cc'), username: \"Berniece4095\" }, _id: ObjectId('6086de640c64a50f5ca5a417'), content: \"Natus officiis quasi veritatis minus exercitationem libero ut.\", blog: ObjectId('6086de5a0c64a50f5ca5a290'), updatedAt: new Date(1619451492591), createdAt: new Date(1619451492591) } ]})"

}