簡體   English   中英

如何在 firebase v9 的 firesrore 中為每個用戶只更新一次特定字段的數據?

[英]How to update a specific field of data only one time for each user in firesrore in firebase v9?

我正在創建一個類似 sns 的 web 應用程序,並試圖實現一個“喜歡帖子”function。基本上每個帖子都有 firestore 中的數據,例如帖子的標題,帖子的圖片,帖子的喜歡數量等等。我想做的是,如果用戶點擊任何帖子上的贊按鈕,點擊帖子的贊數將增加 1。但是,我不知道如何限制每個用戶只能喜歡每個帖子一次。 我當前的代碼適用於增加喜歡的數量,但用戶可以在用戶點擊后喜歡帖子的次數。 我完全是 firebase、react 和 javascript 的初學者,非常感謝您的幫助。 謝謝你。

這是我的代碼,用於增加喜歡的數量。

 const likeHandle = async () => {
        const docRef = doc(db, "posts", postId);

        await updateDoc(docRef, {
            noLikes: noLikes + 1
        });
    }

您將無法在跟蹤點贊數量的同一文檔中大規模執行此操作,因為每個文檔都有最大大小。

您需要做的是將每對用戶和點贊的記錄存儲在單獨集合中其自己的文檔中,並檢查以確保任何新的點贊請求尚未在另一個集合中表示。 如果那對用戶和帖子有記錄,您的 UI 也應該禁用點贊,這樣用戶就不會看到您不希望他們選擇的選項。

沒有直接的方法來限制用戶寫入特定數據的頻率。

但是,您可以做的是:

  • 將帶有 UID 的usersWhoVoted字段添加到文檔,或它下面的userWhoVoted子集合。
  • 在一次操作中將增加的點贊數和 UID 寫入數據庫(如果您選擇子集合,則使用事務/批量寫入)。
  • 使用僅允許用戶在該操作中還添加了 UID 時增加計數的安全規則,並且僅在刪除它時才減少計數(如果這也是您想要支持的用例)。

您可能還應該使用原子increment操作,以防止依賴於可能過時的客戶端 state(盡管您的安全規則應該捕獲並拒絕這種情況)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM