React Native에서 Firestore에서 특정 doc을 불러오는 방법

React Native로 앱을 만들고 있습니다.
기본 기능은 글 작성/조회/삭제 + 해당 글에 대한 댓글 작성/삭제를 구현하려는데
해당 글 작성과 조회는 되는데 삭제가 안됩니다.

    import auth from '@react-native-firebase/auth'

    export default DetailPage(){
        const user = auth().currentUser;

        const Submit = async () => {
            try {
                const result = await firestore()
                    .collection("Users")
                    .doc(user.email)
                    .collection("Todo")
                    .doc(이곳!)    // <============= 이곳에 들어가야할 값을 못 구하겠습니다ㅠㅠ
                    .delete()
                    alert("삭제완료")                
            } catch (error) {
                console.log(error)
                alert("삭제실패")
            }
        }

    return (
    (...)
    )
    }

위 코드를 보시면 알겠지만 정보가 담겨있는 firestore의 경로는
스크린샷 2021-11-17 오후 6.24.12
이렇게 되어있습니다(앞부분은 표시가 안돼서 뒷부분만 캡쳐해서 올립니다.)

React Native Cli , android 입니다!

해당 기능은 목록에 있는 글 a를 들어갔을 때, a의 상세(정보가 띄워지는)페이지에 있는 삭제 버튼을 눌렀을 때 입니다.

저 빨간 박스에 있는 코드를 하드코딩해서 저 .doc(이곳!)에 넣어서 해당 기능을 작동시키면
실제 firestore에 있는 데이터가 지워지는 걸 확인했습니다.

그런데 문제는 저 값이 제가 설정해준 값이 아닌 firestore에 내용이 들어갈때 자동으로 만들어지는 랜덤값이라는 겁니다.
그래서 삭제할 때, .doc(이곳!) 에 값을 넣어야하는데 값을 어떻게 불러와야할지 몰라서 코딩지식인분들의 조언을 듣고 싶어 글을 올려봅니다…

안녕하세요, where()문을 사용해 보시는것은 어떨까요?

           const Submit = async () => {
               try {
                    const result = await firestore()
                        .collection("Users")
                        .doc(user.email)
                        .collection("Todo")
                        .where('id','==','해당 doc에 들어있는 id값')
                        .get()
 
                    if (!result.empty && result.docs[0].exists){   
                         result.docs[0].ref.delete();     
                     }   
                     alert('삭제 완료!')
            } catch (error) {
                console.log(error)
                alert("삭제실패")
            }
        }

아귀다람쥐님이 올려주신 사진을 보면
지우시려는 doc에서 id field값이 있는것 같은데,
해당 아이디 값을 where문에 명시해주면 될것 같네요!

where문은 collection안의 명시해주는 field값들을 뒤져서 해당값이 일치하는 doc을 찾아줍니다

뒤늦게 발견했네요!!
where문을 사용하는 방법을 조금이라도 알아가서 감사하게 생각합니다!

문제는 해결했습니다!
일단 기존 id 값에 const ID = v4(); + ‘랜덤값 지정하는 라이브러리 사용’ 으로 id:ID;를 해버려,
기존에 있을 id값을 새로운 id값으로 덮어버렸습니다…(불필요한 행동이었습니다!)
그래서 문서추가의 id값과 해당하는 아이템의 id값이 달랐던거구요…;;;(원래는 동일함!)

그리고 목록에 뿌려진 데이터를 상세페이지에서 조회(navigate를 통해 화면 넘어가고 정보 넘겨줌)하기 때문에
route.params 로 id를 받아왔습니다!

그래서 최종 수정된 코드는

    import auth from '@react-native-firebase/auth'

    export default DetailPage({route}){    // <==== 이렇게 {route}로 목록 정보를 받아와서
        const user = auth().currentUser;

        const Submit = async () => {
            try {
                const result = await firestore()
                    .collection("Users")
                    .doc(user.email)
                    .collection("Todo")
                    .doc(route.params.id)    // <==== console로 찍었을 때 id 위치를 찾아 넣어줬습니다!
                    .delete()
                    alert("삭제완료")                
            } catch (error) {
                console.log(error)
                alert("삭제실패")
            }
        }

    return (
    (...)
    )
    }

해결되었다니 다행이네요 고생하셨습니다 :clap:

1개의 좋아요