找不到某些请求的文件。-firestore 颤动
Posted
技术标签:
【中文标题】找不到某些请求的文件。-firestore 颤动【英文标题】:Some requested document was not found.-firestore flutter 【发布时间】:2021-01-10 00:25:28 【问题描述】:在我的颤振应用程序中,当用户创建帐户时,我需要创建一个新文档并在 firestore 中创建一个新字段并将值设置为新字段。当用户创建他的帐户时,我打电话给await Database().updateusername(email);
这是
Future updateusername(String username) async
final DocumentReference Docreference =
FirebaseFirestore.instance.collection("Songs").doc(username);
return await Docreference.update("Username": username);
但我得到了这个错误
cloud_firestore/not-found] 一些请求的文件没有找到。
我的 Firestore 版本是 ^0.14.0+2
有人可以帮我解决这个问题
【问题讨论】:
【参考方案1】:错误消息告诉您未找到您构建参考的文档以进行更新。您不能update() 一个不存在的文档。根据链接的 API 文档:
如果尚不存在文档,则更新将失败。
如果要创建不存在的文档,则需要使用set() 而不是更新。如果您希望能够在文档不存在时创建文档,或者在文档已存在时对其进行更新,则应将 SetOptions.merge
作为第二个参数传递,如 API 文档所述。
【讨论】:
【参考方案2】:您还可以执行 if else 来检查文档是否存在,例如:
var a = await FirebaseFirestore.instance
.collection("collection_name")
.doc("documentname")
.get();
if (a.exists)
final DocumentReference documentReference = FirebaseFirestore.instance
.collection("collection_name")
.doc("documentname");
return await documentReference.update(
//your data
);
else
final DocumentReference documentReference = FirebaseFirestore.instance
.collection("collection_name")
.doc("documentname");
return await documentReference.set(
//your data
);
【讨论】:
在 get 和 update 调用之间文档仍有可能被删除,这将导致更新失败。安全地做到这一点的唯一方法是通过交易。以上是关于找不到某些请求的文件。-firestore 颤动的主要内容,如果未能解决你的问题,请参考以下文章