Java Firestore增量替换或删除字段

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));

我试图使用来跟踪Firestore上存储了多少特定容器的警报。为此,在每个包含警报的API调用上,我将通过以下操作更新此计数器:

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种情况:

  • 如果该字段不存在,将使用值1创建该字段
  • 如果该字段已经存在,则可以将其替换为值为1的相同字段(替换的意思是删除旧字段并替换新字段)
  • 如果该字段已经存在,则可以增加该字段,但该字段会在值增加后立即删除
  • 最后是最罕见的,如果这个字段已经存在,它会增加1
  • 这4种行为是非常随机的,我无法找出其中的模式。我只见过第四种情况发生一两次


    Firestore数据的一些图片可能有助于可视化问题(很抱歉,我无法截屏事件):

    行为2

    行为3


    行为4

    将此作为社区Wiki发布,因为OP自己已经解决了这个问题

    由于您已经知道无论如何都会使用此字段,因此使用
    'alarmCount'=0
    初始化文档是一种很好的做法,这样您就可以使用值而不是空值进行检查,这可能是缓解这些意外行为的一种好方法


    话虽如此,您经历的大多数行为确实有点奇怪,您可以在中打开一个案例来找出发生这种情况的原因。

    您是否使用firebase事务更新值@谢谢你的建议,我刚刚尝试过用这种方式实现,但替换问题仍然存在,不过这是因为我无法检索所有文档字段,
    snapshot.getData()
    返回图像中显示的除“alarmCount”之外的所有字段。我将尝试在集合创建中添加一些更改,因为我怀疑这就是问题所在。@ked它起作用了!!在声明
    'alarmCount'=0
    之后,当它被创建时,我能够毫无问题地更新字段值,我仍然不明白为什么这会是一个巨大的麻烦,但是,嘿,它现在工作正常好吧,这很奇怪,但很好,它工作正常