TIL. firestore

jungzkxm·2021년 11월 22일
0

Today I learned

목록 보기
30/30

나의 목적 요약 :
한 콜렉션안에 documents 와 내가 가진 array 를 비교해서 없는 요소는 새로운 doc 을 생성하고 있는 요소는 doc.count 를 +1 해준다.

과정(문제점) :
firestore 에서 transaction 을 사용기로 마음먹고 다양하게 시도해봤지만 doc() 괄호안에 내가 가진 array 를 넣는게 가장 문제였다.

내가 시도해본 방법들중 하나 예시 1

내가가진array.forEach((el)=>{
	return const docRef = db.collection('어쩌고').doc(el)
})

실패사유 : forEach 를 돌린다면 애초에 첫 요소가 return 되기 때문에 forEach 를 사용하지 말아야했다.
결론 => map 사용하니 가능 ...!!

내가 시도해본 방법들중 하나 예시 2

const docRef = db.collection('어쩌고')
or
const docRef = db.collection('어쩌고').where('어쩌고')

실패사유 : docRef 를 지정하는것까지는 가능하나 transaction을 사용할 때 path 를 못읽는다.

map과 forEach의 다른점에 대해서 알고있음에도 불구하고 습관적으로 forEach를 사용했고 생각의 전환을 하지못했다.

결과:

// 우선 내가 가진 array 를 map을 돌려서 path(ref) 만 있는 array 로 만들어준다. 
const newArr = 내가 가진 array.map((el) => {
        return db.collection('어쩌고').doc(el);
      });

//이렇게하면 path 만 들어있는 array 가 생기고 그걸 transaction안에서 사용해준다.
 db.runTransaction(async (transaction) => {
 	  newArr.forEach(async (el) => {
          const docOfOne = await transaction.get(el);
          if (!docOfOne.exists) {
            el.set('내가하고싶은대로'),
              text: `${selectedArr[i]}`,
            });
          }
        });
      }).catch((error) => {
        console.log(error);
      });
 })

성공적으로 firestore에 있는 doc 의 요소들과 비교가능 !

profile
단순히 개발자로서 제게 있었던 일을 적는 공간입니다 ✍🏻

0개의 댓글