Создать новый, если не существует, обновить в Firebase - PullRequest
0 голосов
/ 18 марта 2019

Я использую Firebase в качестве базы данных для моего мобильного приложения, созданного с использованием собственного кода.В одном сценарии мне нужно проверить это, если ребенок уже представлен?если нет, создайте нового потомка, обновите существующий потомок.

У меня есть дерево с именем CouponUsage, и в нем есть все пользователи, которые использовали код купона.

Структура дерева выглядит следующим образом:

   -CouponUsage
       -user1
          -coupon1: 0    // couponcode name and Number of times used
       -user2
          -coupon1: 2
          -coupon2: 0

Итак, что я хочу, мне нужно проверить, если «user1» или «user2» уже существует?И если они не существуют, новая запись с «user1» или «user2» должна быть создана с соответствующим кодом купона, который они ввели.

Весь сценарий, пользователь введет код купона в приложение, и яПосле проверки кода и последующего его исправления код купона будет отправлен в облачную функцию Google, и тогда произойдет указанное выше действие.Таким образом, когда пользователь введет код купона (каждый код купона имеет отдельный лимит использования пользователем), код будет отправлен, и функция должна проверить, существует ли «user1» и существует ли введенный пользователем код?А если таковые существуют, просто обновите счетчик, иначе создайте «user1» и добавьте дочерний элемент «coupon1» (купон, введенный пользователем), а затем запустите счетчик с 1.

Вот мой код в облачной функции Googleкак сейчас!:

 if(usersCouponUsage) {
            await admin.database().ref(`couponUsage/${phone}`)
            .update({ [couponCodeName]: usersCouponUsage + 1 });
        }

Ясно обновляю счет, если я тоже пройду счет.Как реализовать сказанное выше в firebase?

1 Ответ

0 голосов
/ 18 марта 2019

Это на самом деле довольно легко. Поскольку вы обновляете счетчик, вы должны использовать Транзакция , которая при «изменении существующего значения на новое значение» будет «гарантировать», что не будет конфликтов с другими клиентами, одновременно записывающими данные в одно и то же местоположение. «.

Хорошей новостью является то, что транзакция автоматически обработает случай, когда пары пользователь / купон не существует.

Вот код для включения в вашу облачную функцию:

   .....
   const user = 'user1';  //Set the user
   const coupon = 'coupon1'  //Set the coupon

   const couponUsageRef = admin.database().ref('CouponUsage/' + user + '/' + coupon);

   return couponUsageRef.transaction(currentNbr => {
      return currentNbr + 1;
   });
   .....

Если вы хотите проверить транзакцию вне облачной функции, просто скопируйте / вставьте следующий код в HTML-файл, который вы можете сохранить локально, измените элементы конфигурации Firebase на свои собственные и откройте его в браузере.

<!DOCTYPE html>
<html lang="en-US">
<head>

    <meta http-equiv="Content-Type" content="text/html" charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, user-scalable=yes">

    <script src="https://www.gstatic.com/firebasejs/5.9.0/firebase.js"></script>


</head>

<body>

    <script>

        var config = {
            apiKey: "--yourValue--",
            authDomain: "--yourValue--",
            databaseURL: "--yourValue--",
            projectId: "--yourValue--"
        };


        firebase.initializeApp(config);

        var user = 'user1';
        var coupon = 'coupon2'
        var db = firebase.database();
        var couponUsageRef = db.ref('CouponUsage/' + user + '/' + coupon);

        couponUsageRef.transaction(function(currentNbr) {

           return currentNbr + 1;
        });

    </script>

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