Flutter Firestore更新(如果不存在则更新)

Kod*_*ata 5 flutter google-cloud-firestore

我想知道是否存在特定文档,请更新该文档,如果不能,则可以在Firestore中创建该文档。例如,用户使用post输入了一些标签,然后看起来像这样
Firestore.instance.collection('tags').document(tag here).updateData()。如果该文档不存在,有什么办法可以创建方法吗?还是在写之前必须检查是否存在?

Cop*_*oad 8

2021 年更新:

set在文档上使用并提供一个SetOptionswith merge: true. 来自文档

在文档上设置数据,覆盖任何现有数据。如果该文档尚不存在,则会创建该文档。

如果提供了 SetOptions,数据将合并到现有文档中而不是覆盖。

var collection = FirebaseFirestore.instance.collection('collection');
collection
    .doc('doc_id')
    .set(yourData, SetOptions(merge: true));
Run Code Online (Sandbox Code Playgroud)


Dou*_*son 6

我不知道它如何专门与Flutter配合使用(我一生中都没有写过Dart),但是其他客户端API允许set()(或者在您的情况下为setData())的第二个参数允许要创建的文档(如果不存在)或在已经存在的情况下合并。

有关其他语言的示例,请参见文档。可能只是{ merge: true }作为第二个参数传递的问题(例如网络示例),或者可能使用了SetOptions.merge()类似的Java。


stw*_*ert 6

@Doug是正确的,在Flutter Firestore API中有一个选项:

Firestore.instance.
  collection('tags').
  document(tag here).
  setData(data, merge: true)
Run Code Online (Sandbox Code Playgroud)

从文档:

setData(Map<String, dynamic> data, {bool merge: false}) ? Future<void>

写入此DocumentReference引用的文档。如果该文档尚不存在,将创建它。

如果merge为true,则提供的数据将合并到现有文档中,而不是覆盖。

将其与from中的文档进行比较,该文档updateData显然会失败。

updateData(Map<String, dynamic> data) ? Future<void>

更新此DocumentReference引用的文档中的字段。

如果尚无文档,则更新将失败