firebase Firestore文档更新

f45qwnt8  于 2023-05-29  发布在  其他
关注(0)|答案(1)|浏览(288)

我在Typescript Cloud Functions上使用set方法。显然,如果文档存在,我们将update文档。在Flutter中,如果Firestore上的文档与我推送到Firestore的文档相同,则不会触发StreamBuilder方法。当更新前后的文档相同时。
这是因为Firestore update方法在更新前后的文档相同时不返回任何内容吗?或者是因为Flutter中的StreamBuilder不是出于同样的原因触发的?
如何解决这个问题,即当我在Firestore上使用了updated方法,而我更新的文档没有任何更改时,我如何在Flutter中触发StreamBuilder?

  • 我不想使用delete方法,如果文档存在,然后创建触发StreamBuilder的文档,因为这将触发StreamBuilder两次,不是一个好方法。
7bsow1i6

7bsow1i61#

当您在Firestore中使用update方法时,它仅在您提供的数据与现有文档不同时执行更新操作。如果数据是相同的,Firestore认为这是一个幂等操作,这意味着它不会对文档进行任何更改。
因此,Flutter应用中的StreamBuilder不会收到任何更新,因为当文档没有实际更改时,Firestore不会触发更改事件。
要解决此问题并确保即使在更新后文档相同时也会触发StreamBuilder,您可以考虑setmerge选项的组合。
使用set with merge:true,则即使文档没有更改,也可以触发StreamBuilderset操作实际上将执行merge操作并触发Firestore中的更新事件,然后Flutter应用程序中的StreamBuilder将接收该事件。

FirebaseFirestore.instance
    .collection('your_collection')
    .doc('your_document_id')
    .set(yourData, SetOptions(merge: true));

相关问题