Как запретить установку collection (), если ключ уже существует в firebase - PullRequest
0 голосов
/ 09 ноября 2019

Я создал коллекцию под названием «монеты». Эти монеты, такие как биткойны, добавляются в базу данных, если пользователь нажимает кнопку «Follow», которая появляется рядом с каждой монетой, отображаемой на моем сайте. Проблема в том, что если пользователь нажимает кнопку «Follow» более одного раза, эта монета будет добавляться в базу данных каждый раз, когда пользователь нажимает на нее. Что я хочу сделать, если эта конкретная монета уже находится в базе данных, не устанавливать (). Я уверен, что есть способ для этого, но я не уверен. Все данные, которые я установил (), поступают из объекта, называемого данными, который содержит все данные для монеты.

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 - это то, что я передаю в Onclick на моем followButton * 1007. *

Я ожидаю, что если пользователь несколько раз нажмет кнопку «Follow», эта монета будет добавлена ​​только один раз.

1 Ответ

1 голос
/ 09 ноября 2019

Если price.id определяет идентификатор, который вы хотите быть уникальным, вы можете использовать этот идентификатор в качестве имени документов в коллекции coins:

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

Теперь при втором запускеэто просто обновляет тот же документ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...