java - 如何将 If 语句放入事务 Firebase Firestore

标签 java android firebase transactions google-cloud-firestore

当用户点击一个按钮时,它会检查 Firestore 中的文档是否存在,如果存在,则更新(增加)一些值,如果不存在,则使用新值创建一个新文档.

我可以只执行正常的 documentRef.get()documentRef.set(),但是当我用 2 个用户测试它时同时按下按钮时间。它只是把其中一个的新值(value)。所以我使用了交易。

在这个交易中,首先我得到了文档快照,然后我得到了值。 然后我放入 if 语句来检查文档是否存在,第一个语句(文档存在)工作正常,但是当我删除文档时,else 语句没有做任何事情。

甚至可以在 Firebase Firestore 事务中使用 if 语句吗?

Map<String, Object> newDocumentSet = new HashMap<>();
        newDocumentSet.put("sold", 1);
        newDocumentSet.put("price", myProductPrice);

mDb.runTransaction(new Transaction.Function<Void>() {

            @Nullable
            @Override
            public Void apply(@NonNull Transaction transaction) throws FirebaseFirestoreException {

                DocumentSnapshot myDocumentSnapshot = transaction.get(myDocumentRef);
                long newAddSold = myDocumentSnapshot.getLong("sold") + 1;
                long newAddPrice = myDocumentSnapshot.getLong("price") + myProductPrice;

                if(myDocumentSnapshot.exists()){

                    transaction.update(myDocumentRef, "sold", newAddSold);
                    transaction.update(myDocumentRef, "price", newAddPrice);

                }else {

                    transaction.set(myDocumentRef, newDocumentSet);

                }


                return null;
            }
        });

我不知道发生了什么,它没有显示任何错误,如果我犯了一些错误或有其他方法,请告诉我。

最佳答案

or there is another way of doing this..

是的,甚至有一个更简单的,实际上比事务更有效,因为它不需要需要客户端和 Firebase 服务器之间的往返。假设 mDb 指向正确的文档,要将 sold 属性增加 1,请使用以下代码行:

mDb.update("sold", FieldValue.increment(1));

关于java - 如何将 If 语句放入事务 Firebase Firestore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57345133/

相关文章:

java - 将 LinkedList 更改为优先级队列

android - 添加 Google Fit 距离(DataPoint 超出范围)

javascript - 尝试导入错误 : 'FetchXmlHttpFactory' is not exported from '@firebase/webchannel-wrapper' (imported as 'v' )

android - 如何使Firebase用户在Google登录功能之外 flutter 朔迷离?

java - HQL多对多存储库方法

java - JS、CSS、Images等公共(public)资源放在哪里?

Java、Swing - JPanel 没有按预期出现在 JFrame 中

java - 从 LinearLayout 中删除一个 View 或一系列 View 会导致调用 unFocus 时出现 NullPointerException

java - 使用 Android 应用程序将文件上传到我的 Google API 项目

firebase - 你如何创建一个封闭的漏斗?