gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:01:37 24 4
gpt4 key购买 nike

当用户点击一个按钮时,它会检查 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com