如果密钥已经存在于Firebase上,如何防止设置collection()

问题描述 投票:0回答:1

我创建了一个名为“硬币”的集合,如果用户单击在我的网站上显示的每个硬币旁边显示的跟随按钮,这些硬币(例如比特币)将被添加到数据库中。问题在于,如果用户多次单击“跟随”按钮,则每次用户单击该代币都会将其添加到数据库中。我想做的是,如果该特定硬币已经存在于数据库中,请不要set()。我确定有解决方法,但不确定。我set()的所有数据都来自名为data的对象,该对象保存硬币的所有数据。

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

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

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

这是我的功能组件的顶部。{price}保存唯一的硬币数据。之所以与众不同,是因为我将网址设为动态,因此如果用户访问比特币,其网址为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的东西

我希望用户多次单击跟随按钮,该硬币只会被添加一次。

javascript reactjs firebase google-cloud-firestore
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.