Flutter Firestore快照始终为null或为空列表

时间:2020-03-04 01:43:42

标签: firebase flutter dart google-cloud-firestore

我正在尝试获取Firestore快照,但它始终返回null,我不知道问题出在哪里..

please see the image here

我的规则:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.uid != null;
    }
  }
}

我的代码1:

await Firestore.instance.document("myDB/EG/EG/Cairo Governorate").collection("Alexandria Governorate").limit(10).getDocuments().then((snapshot)async{
print(snapshot.documents);//[]
});

我的代码2:

await Firestore.instance.document("myDB/EG/EG/Cairo Governorate/Alexandria Governorate").get().then((snapshot)async{
print(snapshot.data);//null
});

更新how this document does not exist ?

2 个答案:

答案 0 :(得分:0)

在代码的第一部分,空数组意味着您的查询未在命名集合中找到任何文档。

在第二行代码中,null的{​​{1}}表示所请求的文档不存在。

在两种情况下,由于我们看不到您的数据并验证其是否存在,因此无话可说。这与安全规则无关,因为如果查询被规则拒绝,查询将完全失败。我怀疑您代码中的名称根本不匹配您数据库中的名称。

答案 1 :(得分:0)

Firebase docs regarding Delete Douments中,警告您删除文档时不会删除其子集合。这就是为什么这些文档都标有此描述的原因。但是子集合应该仍然可用。

在这两个代码示例中,您都使用“亚历山大省”作为文档,同时从屏幕快照中猜测其集合。

我没有游乐场来测试它,但是它应该像这样:

await Firestore.instance.collection("myDB/EG/EG/Cairo Governorate/Alexandria Governorate").limit(10).getDocuments().then((snapshot)async{
print(snapshot.documents);//[]
});

并这样:

await Firestore.instance.document("myDB/EG/EG/Cairo Governorate/Alexandria Governorate/<EXISTING DOCUMENT ID>").get().then((snapshot)async{
print(snapshot.data);//null
});

如果任何文档仍然存在,则此类查询可能会成功。由于屏幕快照中的所有文档均为斜体,因此我想只引用了一些空的子集合。因此,您将无法查询任何内容。

我希望它将对您有帮助!

相关问题