javascript - 如果 firebase 上已存在 key ,如何阻止 collection() 设置

标签 javascript reactjs firebase google-cloud-firestore

我创建了一个名为“硬币”的集合,如果用户单击我网站上显示的每个硬币旁边出现的“关注”按钮,这些硬币(例如比特币)就会添加到数据库中。问题是,如果用户多次单击“关注”按钮,则每次用户单击该硬币时,该硬币都会添加到数据库中。我想要做的是,如果该特定硬币已经在数据库中,则不要设置()。我确信有一种方法可以做到这一点,但我不确定。我 set() 的所有数据都来自一个名为 data 的对象,该对象保存了硬币的所有数据。

const FollowIcon = ({ price }) => {
  const db = firebase.firestore();

  const [title, setTitle] = useState("Follow");

  const [following, setFollowing] = useState(false);

这是我的功能组件的顶部。 {price} 保存唯一的硬币数据。 它之所以独特是因为我将 URL 设为动态,所以如果 用户访问比特币,url将为PriceDetails/BTC

const handleClick = () => {
    let data = {
      following: following,
      logo_url: price.logo_url,
      id: price.id,
      name: price.name,
      price: price.price,
      userId: firebase.auth().currentUser.uid
    };
//adding the data above to firebase's real time database
    db.collection("coins")
      .doc()
      .set(data);


    setTitle("Following");
    setFollowing(!following);
 };

handleClick 函数是我传递给 followButton 上的 Onclick 的函数

我预计,如果用户多次点击“关注”按钮,该硬币只会添加一次。

最佳答案

如果 price.id 定义了您希望唯一的 ID,则可以使用该 id 作为 coins 集合中文档的名称:

db.collection("coins")
  .doc(price.id)
  .set(data);

现在,当您第二次运行此命令时,它只会更新同一文档。

关于javascript - 如果 firebase 上已存在 key ,如何阻止 collection() 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58775629/

相关文章:

php - 如果条件为真,我如何写入 textarea 值

javascript - 选择应用程序各个页面的元素

javascript - 如何在 MathJax 中更改方程颜色

reactjs - 你如何将泛型类型传递给 typescript tsx 文件中的匿名函数

AngularFire2 初始化应用程序出错

javascript - 当 $scope 更改时重新运行响应式(Reactive)助手

javascript - react-redux 中的几个同名 Action

javascript - React 中作为 prop 传递时区分 img 和 svg

ios - Firebase ios 无法获取时间戳 [Firebase/Database][I-RDB038012] Listener at/serverTimestamp 失败 : permission_denied

android - 应用程序终止时从 FCM 启动 Activity ?