我有一个存储库数据库,其中有“歌手”,然后在每个歌手中都有每个歌手的“歌曲列表”子集合。我能够从主集合中获取数据,但不能从子集合中获取数据。你们可以帮忙吗?
流生成器
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]),
)
答案 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,然后将艺术家姓名放入字段中。