как получить данные из подгруппы firestore - PullRequest
0 голосов
/ 06 августа 2020

У меня есть база данных firestore, в которой есть "Singer", тогда внутри каждого певца есть подколлекция "Song List" для каждого певца. я могу получить данные из основной коллекции, но не из подгруппы. вы можете помочь?

Stream Builder

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 подпрограмма базы данных

Ответы [ 3 ]

2 голосов
/ 06 августа 2020

Вы можете прочитать это так:

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 и их subcollection

2 голосов
/ 06 августа 2020

Вы можете получить данные из коллекции, открыв вложенную коллекцию внутри документа следующим образом:

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

или

Firestore.instance.collection('singers/aryana sayeed/song list').snapshots()
1 голос
/ 06 августа 2020

Чтобы прояснить, о чем вы говорите: вам нужен список всех песен от всех певцов,

Easy-Peasy. CollectionGroup - ваш друг.

Я не использую вашу среду, но вижу, что:

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

- это то, что вам нужно. collectionGroup рассматривает все вложенные коллекции с именем «список песен» как одну коллекцию.

ПРИМЕЧАНИЕ (потому что это всегда появляется ). Каждый возвращаемый documentSnapshot включает поле ' refpath '- это строка с полным путем к указанному c документу. Вы можете тривиально проанализировать строку, чтобы найти родительский документ (ы) или коллекции (ы). Например, конкретная песня, в которой есть refPath "... / singers / {singersID} / songlist / {songID}"

btw, Я НАСТОЯТЕЛЬНО НАСТОЯТЕЛЬНО рекомендую ПРОТИВ использовать имя исполнителя в качестве идентификатора документа. . Запросы, как правило, состоят из полей, а не идентификаторов документов, поэтому они не помогут вашему коду найти исполнителя, и они не являются ни достаточно уникальными, ни достаточно случайно распределенными, чтобы быть эффективными. Позвольте Firestore сгенерировать для вас уникальные идентификаторы документов и указать имя исполнителя в поле.

...