개발자

mongoose 참조 관련 질문입니다. (수정)

2023년 01월 25일조회 86

nodejs, mongoose, mongodb 그리고 데이터 확인용으로 mongodbCompass를 사용중임을 알립니다. 현재 A,B 컬렉션이 있고, A 가 B를 참조하고 있습니다. B컬렉션에서 데이터를 삭제하면 B컬렉션에서 삭제되고 로그를 찍어보면 정상적으로 A컬렉션에서도 참조하고 있는 B 데이터가 빠지는 걸 확인했는데 mongodb Compass에서는 바뀌지 않습니다. 원래 mongodb compass에서 느리게 처리되는 건지 살짝 멘붕이 와서 질문드립니다.. -------------------------------- 현재까지 실험결과 B컬렉션 데이터 2개 추가 시 -> A 컬렉션에 대해 findById 결과 --> B 데이터 2개 추가 -> A 컬렉션에 대해 findOne({_id:_id}) 결과 --> B 데이터 2개 추가 B컬렉션에 대해 데이터 1개 삭제시 -> A 컬렉션에 대해 findById 결과 --> B 데이터 1개 , (1개 삭제) -> A 컬렉션에 대해 findOne({_id:_id}) 결과 --> B 데이터 2개 (삭제 x) -> mongoCompass -> B 데이터 1개 , A가 참조하는 B 데이터 2개 (삭제 x) 추가로 B컬렉션 데이터 1개 추가 시 -> A 컬렉션에 대해 findById 결과 --> B 데이터 2개 , (1개 추가) -> A 컬렉션에 대해 findOne({_id:_id}) 결과 --> B 데이터 2개 (이전 1개 삭제후 새로운 참조 데이터 추가 됨 ) -> mongoCompass -> B 데이터 2개 , A가 참조하는 B 데이터 2개 (이전 1개 삭제후 새로운 참조 데이터 추가 됨) stackoverflow 와 mongoose 공식문서를 참고했습니다만 이유는 잘 모르겠습니다.. 코드도 같이 첨부하겠습니다.

1// 데이터 추가 코드 
2async UpdateInterest(userId,request_data){
3        try{
4            const {_id,name,platform, genre, country, releaseDate, ageLimit, time} = request_data;
5            
6            const ext_user = await UserModel.findById(userId);
7            
8            if(!ext_user)  return null;
9            
10            const result = await ext_user.populate("interest");
11
12            const interestList = result.interest;
13            let update_item = null;
14            if(typeof _id==="undefined"){
15                console.log("_id undefined");
16                const new_interest = new InterestModel({
17                    name,
18                    platform,
19                    genre,
20                    country,
21                    releaseDate,
22                    ageLimit,
23                    time
24                });
25                await new_interest.save();
26                interestList.push(new_interest);
27                update_item = new_interest;
28            }else{
29                update_item = await InterestModel.findOne({_id:_id});
30                console.log('to update item :',update_item);
31                if(!update_item) return null;
32                update_item.name = name;
33                update_item.platform = platform;
34                update_item.genre = genre;
35                update_item.country = country;
36                update_item.releaseDate = releaseDate;
37                update_item.ageLimit = ageLimit;
38                update_item.time = time;
39
40                await update_item.save();
41            }
42               
43            result.interest= interestList;
44            // console.log(update_item);
45            await result.save();
46            console.log(result);
47            return update_item;
48        }catch(err){
49
50        }
51    }
52
53
54/// 데이터 삭제 코드 
55async DeleteInterest(userId, interestId){
56
57        try{
58            console.log(userId);
59            console.log(interestId);
60            const cnt = await InterestModel.deleteOne({_id:interestId});
61            console.log(cnt);
62            if(cnt.deletedCount==0) return null;
63            const result = await UserModel.findById(userId).populate("interest");
64            await result.save();
65            return {cnt};
66        }catch(err){
67
68        }
69    }
70
71//
이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

류호준님의 프로필 사진

삭제시 catch문에 에러가 있는지 console.log(err) 로 에러를 확인 해 보세요 만약에 에러문에 걸리지 않는다면 데이터는 삭제가 되고있는게 맞을겁니다. GUI툴로도 확인 해 보시고 데이터베이스에 콘솔환경으로 접속하셔서 쿼리를 날려보시는것도 좋은 방법일 것 같습니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!