ํ์ฌ profile.js ์์ tweet.creatorId === userObj.uid ์ธ ํธ์ ์ปดํฌ๋ํธ์ ๋ฆฌ์คํธ๋ฅผ ๋ชจ๋ ๊ฐ์ ธ์ค๊ณ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์ ๋ช
์ userObj.displayName์ ์
๋ฐ์ดํธ ํ์ฌ ๋ฐ๊ฟ ์ ์๋ค.
๊ทธ๋ฐ๋ฐ tweetObj์ ์ ์ฅ๋ creatorName์ ๋ฐ๋์ง ์์์ ๋ด๊ฐ ์ด ์์ ํธ์์๋ ์์ ๋๋ค์์ด ์๋ ์ํ์ด๋ค ใ
ใ
์ด๊ฒ์ ํด๊ฒฐํด ๋ณด์!
โ
displayName ์์ ์, userObj.uid === tweetObj.creatorId ์ธ tweets ์ปฌ๋ ์
์ ๋ชจ๋ docs์ creatorName`๋ ์ผ๊ด ์
๋ฐ์ดํธํ๊ธฐ
//ver. 9
//ํธ์ ์์ฑ์๋ช
์ผ๊ด ๋ณ๊ฒฝ (batch: 500๊ฐ ๋ฌธ์ ์ ํ)
const updateAllMyTweets = async () => {
const batch = writeBatch(dbService);
const myTweetsQ = query(
collection(dbService, "tweets"),
where("creatorId", "==", userObj.uid)
);
const myTweetsQuerySnapshot = await getDocs(myTweetsQ);
myTweetsQuerySnapshot.forEach((tweet) => {
const myTweetsDocRef = doc(dbService, "tweets", `${tweet.id}`);
batch.update(myTweetsDocRef, {
creatorName: newDisplayName,
});
});
await batch.commit();
};
updateAllMyTweets();
const batch = writeBatch(dbService);์ปฌ๋ ์
์์ ์ฌ๋ฌ ๋ฌธ์๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ์ฟผ๋ฆฌ์ ์ฟผ๋ฆฌ์ค๋
์ท์ ์ด์ฉํ๋ค.
query(collection(dbService, "tweets"), where("creatorId", "==", userObj.uid)
ํ์ฌ ๋ด tweets ์ปฌ๋ ์
์ ๋ฌธ์๋ addDoc()์ผ๋ก ์์ฑํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์์ doc.id๋ ๋ฌด์์๋ก ํ์ฑ๋์ด ์๋ค. ๋ฐ๋ผ์ where()์ ์ฌ์ฉํ์ฌ ํธ์ ์์ฑ์ id์ userObj์ uid๊ฐ ๊ฐ์ tweet ๋ฌธ์๋ง ์ฟผ๋ฆฌํ์ฌ ๋ด๊ฐ ์์ฑํ ํธ์๋ง ๊ฐ์ ธ์ค์.
const myTweetsQuerySnapshot = await getDocs(myTweetsQ);
getDocs()์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ฟผ๋ฆฌ ์ค๋
์ท์ผ๋ก ๋ฐํํ๋ค.
myTweetsQuerySnapshot.forEach((tweet) => { const myTweetsDocRef = doc(dbService, "tweets", `${tweet.id}`); batch.update(myTweetsDocRef, { creatorName: newDisplayName, }); }); โ ์ฐธ๊ณ ๋ก ์ฌ๊ธฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํด์ ๋ช ๋ถ๋์ ์์ฃผ ๊ณจ์น๋ฅผ ์ฉ์๋ค.
myTweetsQuerySnapshot.forEach((doc) => {
const myTweetsDocRef = doc(dbService, "tweets", `${doc.id}`);
batch.update(myTweetsDocRef, {
creatorName: newDisplayName,
});
});
์๋๋ ์ ์ฒ๋ผ forEach()์์ ๊ฐ๊ฐ์ ๋ฌธ์๋ฅผ ๋ณด๋ผ ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ง์ด ์ฐ๋ doc์ด๋ผ๊ณ ์ ์ด๋์์๋ค.
ํ์ง๋ง ์๋์ ๊ฐ์ด ๊ณ์์ ์ผ๋ก ์ดํดํ ์ ์๋ ์ค๋ฅ๊ฐ ๋จ๋ ๊ฒ์ด ์๋๊ฐ...!
Uncaught (in promise) TypeError: doc is not a function
๋๋์ฒด doc()์ด ์ ํ์ ์ด ์๋๋ ๋ง์ด์ผ? ใ ใ ํ๋ ๋์ค..์ค๋ง...์ด๋ฆ์ด ๋๊ฐ์์ ์๊ฐ ํท๊ฐ๋ฆฌ๋ ๊ฑด๊ฐ ์ถ์ด์ doc์ tweet์ผ๋ก ๋ฐ๊ฟ๋ดค๋ค.
ํํํํํ ์ด์ด์์ดใ
ใ
doc์ด๋ผ๊ณ ์ฃ๋ค ์จ๋์ผ๋ doc์ด ๋ณด๋ด๋ arg์ธ์ง ํ์ด์ด๋ฒ ์ด์ค fn์ธ์ง ์๋ ํท๊ฐ๋ ธ๋ ๋ณด๋ค. ์์ผ๋ก ์ ์ด์ ์ด๋ฆ์ ๋ค๋ฅด๊ฒ ์ ์๊น ๋ณด๋ค.
๋ฐฐ์น๋ฅผ ์ปค๋ฐํ์ฌ ์ผ๊ด์ ์ผ๋ก ํ๊บผ๋ฒ์ ๋ฌธ์๋ฅผ ์
๋ฐ์ดํธ ํ๋ค.
await batch.commit();
์ผ๊ด ์ฐ๊ธฐ๋ ์ฝ๊ธฐ ๋ฌธ์๋ฅผ ์์ ํ์ง ์๊ณ ์ ์งํ ํ์๊ฐ ์์ผ๋ฏ๋ก ์คํจ ์ฌ๋ก๊ฐ ์ค์ด๋ ๋ค. ์ฌ์๋ ๋๋ ๋๋ฌด ๋ง์ ์ฌ์๋ ์คํจ์ ์ํฅ์ ๋ฐ์ง ์๋๋ค.
updateAllMyTweets();์ฐธ๊ณ
๐ Firebase: batched-writes
๐ Firebase: get multiple documents from a collection
๐ Reddit: Can I update multiple docs in collection group in a single update operation
๐ Stackoverflow: Can Firestore update multiple documents matching a condition, using one query?