当我更新我已经拥有的文档时,Firestore数据库增加读取操作?



我使用getDocData函数获取一个文档。

Future getDocData(String docPath) async {
try {
print(docPath);
final response = await fireStore.doc(docPath).get();
return response.data();
} catch (e) {
throw UnimplementedError(e.toString());
}
}

在我得到文档后,我用updateDocument函数更新了相同的文档。

Future updateDocument<T>(docPath, docField, data) async {
try {
return await fireStore.doc(docPath).set(
{docField: data},
SetOptions(
merge: true,
),
);
} catch (e) {
throw UnimplementedError(e.toString());
}
}

操作完成时。我期望在firebase使用仪表板上一个读和一个写操作发生,但我看到两个读和一个写操作。有办法解决这个问题吗?

我尝试使用set和update更新文档,并观察到如下所示的读取和写入:

对于set(),我在仪表板上有两次读取和一次写入。Set()使用merge而不是更新现有文档将创建一个复制现有字段的新文档,同时保留相同的文档id。这就是我得到一个额外读操作的地方。

对于update(),它正在更新现有文档,并且将进行一次读和一次写操作。

docfield传递的值应该是一个关键,这意味着它需要通过[]括号。看一下示例代码:

Future updateDocument<T>(docPath, docField, data) async {
try {
return await fireStore.doc(docPath).update(
{[docField]: data}, // ⇐ notice
);
} catch (e) {
throw UnimplementedError(e.toString());
}
}

最新更新