如何从Firestore子集合中获取数据

时间:2020-08-06 10:09:52

标签: firebase flutter dart google-cloud-firestore

我有一个存储库数据库,其中有“歌手”,然后在每个歌手中都有每个歌手的“歌曲列表”子集合。我能够从主集合中获取数据,但不能从子集合中获取数据。你们可以帮忙吗?

流生成器

StreamBuilder(
        stream: Firestore.instance.collection('singers').snapshots(),

ListView.Builder

ListView.builder(
                itemCount: snapshot.data.documents.length,
                itemBuilder: (context, index) => SingleChildScrollView(

这是我要显示子集合数据的地方

Text(
                                  snapshot.data.documents[index]['name'],
                                  style: TextStyle(
                                      fontSize: 20, color: Colors.red[500]),
                                )

数据库database main database sub

3 个答案:

答案 0 :(得分:2)

您可以通过访问文档内部的子集合来从集合中获取数据

Firestore.instance.collection('singers').document('aryana sayeed').collection('song list').snapshots()

Firestore.instance.collection('singers/aryana sayeed/song list').snapshots()

答案 1 :(得分:2)

您可以这样阅读:

localhost:8080

现在,这为您提供了集合Firestore.instance.collection('singers').snapshot().listen((val)=>{ val.documents.forEach((doc)=>{ doc.reference.collection('song list') .getDocuments().then((res)=>{ res.douments.forEach((d)=>{ print(d.data); }) }) }) }); singers及其所有文档的流。

答案 2 :(得分:1)

要弄清您的意思:您想要一个 all 歌手的歌曲列表,

简单易用。 CollectionGroup是您的朋友。

我不使用您的环境,但是我可以看到:

StreamBuilder(
        stream: Firestore.instance.collectionGroup('song list').snapshots(),

是您需要的起点。 collectionGroup将名称为“歌曲列表”的 all 个子集合视为一个集合。

注意(因为此总是出现) 返回的每个documentSnapshot都包含一个字段“ refpath”-这是一个字符串,其中包含该特定文档的完整路径。您可以简单地分析字符串以找到父文档或集合。例如,一首特定歌曲的refPath“ ... / singers / {singerID} / songlist / {songID}”

顺便说一句,我强烈建议您使用歌手姓名作为文档ID来反对。查询通常是字段,而不是documentID,因此不会帮助您的代码找到艺术家,而且查询不够独特,也没有足够随机分布以提高效率。让Firestore为您生成唯一的documentID,然后将艺术家姓名放入字段中。