Java Firestore增量替换或删除字段
我试图使用来跟踪Firestore上存储了多少特定容器的警报。为此,在每个包含警报的API调用上,我将通过以下操作更新此计数器:Java Firestore增量替换或删除字段,java,firebase,google-cloud-firestore,Java,Firebase,Google Cloud Firestore,我试图使用来跟踪Firestore上存储了多少特定容器的警报。为此,在每个包含警报的API调用上,我将通过以下操作更新此计数器: db.collection("container") .document(entryDataDto.getCollectionId()) .update("alarmCount", FieldValue.increment(1));
db.collection("container")
.document(entryDataDto.getCollectionId())
.update("alarmCount", FieldValue.increment(1));
我也试过这样做:
Map<String, Object> update = new HashMap<>();
update.put("alarmCount", FieldValue.increment(1));
db.collection("container")
.document(entryDataDto.getCollectionId())
.set(update, SetOptions.merge());
Map update=newhashmap();
update.put(“alarmCount”,FieldValue.increment(1));
db.收集(“容器”)
.document(entryDataDto.getCollectionId())
.set(更新,SetOptions.merge());
这两段代码的工作原理似乎相同,但它们遇到了相同的问题,它们非常不可预测
根据我的测试,可能会出现4种情况:
Firestore数据的一些图片可能有助于可视化问题(很抱歉,我无法截屏事件): 行为2 行为3
行为4将此作为社区Wiki发布,因为OP自己已经解决了这个问题 由于您已经知道无论如何都会使用此字段,因此使用
'alarmCount'=0
初始化文档是一种很好的做法,这样您就可以使用值而不是空值进行检查,这可能是缓解这些意外行为的一种好方法
话虽如此,您经历的大多数行为确实有点奇怪,您可以在中打开一个案例来找出发生这种情况的原因。您是否使用firebase事务更新值@谢谢你的建议,我刚刚尝试过用这种方式实现,但替换问题仍然存在,不过这是因为我无法检索所有文档字段,
snapshot.getData()
返回图像中显示的除“alarmCount”之外的所有字段。我将尝试在集合创建中添加一些更改,因为我怀疑这就是问题所在。@ked它起作用了!!在声明'alarmCount'=0
之后,当它被创建时,我能够毫无问题地更新字段值,我仍然不明白为什么这会是一个巨大的麻烦,但是,嘿,它现在工作正常好吧,这很奇怪,但很好,它工作正常