如何从firebase获取子集合数据?
我正在试图计算一些数据。我有一个视频集合,然后每个视频都有一个文档id,然后是一些字段,例如上传此视频的用户的uid。而且每个视频都有一个名为uservotes的子集合。在他们的视频中,我保存了该视频的用户投票。这就是它的样子 我想要的是得到一个用户,用户投票率字段一起计算。 下面是我如何得到一个视频的评级,也许这将有助于理解如何从firebase获取子集合数据?,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我正在试图计算一些数据。我有一个视频集合,然后每个视频都有一个文档id,然后是一些字段,例如上传此视频的用户的uid。而且每个视频都有一个名为uservotes的子集合。在他们的视频中,我保存了该视频的用户投票。这就是它的样子 我想要的是得到一个用户,用户投票率字段一起计算。 下面是我如何得到一个视频的评级,也许这将有助于理解 FutureBuilder( future: firebase,
FutureBuilder(
future: firebase,
builder:
(BuildContext context, snapshot) {
if (snapshot.connectionState ==
ConnectionState.waiting) {
return Center(
child: Text("loading..."));
} else {
double summe = 0.0;
final docs = snapshot.data.docs;
for (int i = 0;
i < docs.length;
i++) {
summe += (docs[i]['rating']);
print(summe);
}
final possiblestars = docs.length * 5;
print(possiblestars);
return Text(
"${summe.toInt()}/${possiblestars}",
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
fontSize: 18),
);
}
}),
因此,我不想获得一个视频的所有用户投票,而是想获得来自同一用户的所有视频的所有用户投票。你可以看到视频集合中的每个视频都有uid字段,这是上传视频的用户的uid,我可以用它获取当前用户id
final uid= FirebaseAuth.instance.currentUser.uid;
在videoscollction中将这个uid保存为uid值的每个视频都是我需要的视频中的一个
. 然后,我想得到每个视频的子集合用户投票所有评级,以计算它们在一起。不要对用户投票集合中的相同uid文档感到困惑,因为上传当前视频的用户也会对自己的视频进行评分。
希望任何人都能帮上忙。不幸的是,一次查询是不可能的。您应该首先获取所有视频,然后对每个视频进行新的调用以获取子集合。根据您的要求,使用您的数据模型,您需要查询所有具有相同
uid
的视频文档,然后,对于每个文档,查询all用户投票子集合的文档
您可以通过将视频所有者uid
添加到uservows
文档并使用collectionGroup查询来简化此查询
但是不建议每次要获取文档数量时都查询整个(子)集合,因为您阅读的每个文档都会收到账单。所以它可以很快生成一张重要的账单
您应该为每个用户维护一个计数器(可能还有每个视频?)。为此,最好的方法是使用。我建议使用云功能来更新计数器,这样最终用户就无法修改计数器。是否有更简单的方法?是否应该保存用户投票收集数据,而不是像现在这样保存在自己的收集中?您仍然需要查询整个(子)集合每次要获取其中的文档数时,都要收集。您的选择取决于您希望在集合和。。。您银行账户上的金额;-)如果我像这样做FirebaseFirestore.instance.collection('UserVoces').doc(uid).collection(“videos”).doc(id).set({'videoid':id,'rating':_rating,'uid':uid});请看我上面的评论。但是为什么我必须查询整个(子)集合呢。我可以用FirebaseFirestore.instance.collection('uservoates').doc(uid)获取数据,然后进行查询我不明白你为什么说我必须查询整个子集合
final uid= FirebaseAuth.instance.currentUser.uid;