作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当用户点击一个按钮时,它会检查 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/
我是一名优秀的程序员,十分优秀!