颤振和火力基地和子集合

Posted

技术标签:

【中文标题】颤振和火力基地和子集合【英文标题】:flutter and firebase and sub-collections 【发布时间】:2021-03-19 11:11:43 【问题描述】:

我一直在寻找高低。希望有人可以提供帮助!

firestore 设置: usersCollection -> userIDs 列表 -> itemsCollection -> itemIDs 列表 -> item_name 等

我能够找到的许多示例都针对特定的用户 ID。我想要的是从所有用户 ID 加载所有 itemID。因此:

用户1 ---- item1 ----项目2 ----第3项 用户2 ---- item1 ----项目2 等等……

我不需要像上面那样显示,我想显示所有项目(最终使用用户ID来操作数据)。有些人建议嵌套流媒体,但这会消耗很多能量(我不喜欢这个想法)

然后我正在考虑使用某种 2D for 循环,或者我也看到了 for each 循环。我相信这些会更合适....

我知道如何获取用户列表,但是我需要获取每个用户的项目列表...我如何获取该部分!?目前我正在尝试在带有图块的列表视图中显示信息,但现在我只需要知道如何访问项目列表。

我试过这样做。

List listUsers = await FirebaseFirestore.instance
    .collection("users")
    .get();


for (int i = 0; i < listUsers.length; i++) 
  FirebaseFirestore.instance
      .collection("users")
      .doc(listUsers[i].documentID.toString())
      .collection("items")
      .snapshots();

但我们不能忘记还有一个项目列表所以....

List listUsers = await FirebaseFirestore.instance
    .collection("users")
    .get();


List listItems = await FirebaseFirestore.instance
        .collection("items")
        .get();



for (int i = 0; i < listUsers.length; i++) 
for (int j = 0; j < listItems.length; j++) 
  FirebaseFirestore.instance
      .collection("users")
      .doc(listUsers[i].documentID.toString())
      .collection("items")
      .doc(listItems[j].documentID.toString())
      .snapshots();

???????????????请帮忙...

==============编辑===============================

回答

List listItems = await FirebaseFirestore.instance
    .collectionGroup('items')
    .get()
    .then((value) => value.docs);

然后您可以像这样访问列表项及其值:

print('OMG------------ $listItems[0].documentID.toString()'); //document ID
print('OMG------------ $listItems[0].data()['item_name']'); // specific value within collection

【问题讨论】:

【参考方案1】:

如果我理解正确,这看起来像 collectionGroup 的示例,它由具有相同 ID 的所有集合组成。您可以在Firebase documentation 上查看一般概念。

当然,这个特性也有 Flutter 实现。你可以找到它documentation on pub.dev。

【讨论】:

优胜者!收藏团聚餐!我编辑了我的问题以显示答案。 很高兴你能弄清楚,因为我没有任何“操场”来做这件事。我将不胜感激接受答案。

以上是关于颤振和火力基地和子集合的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据作为子集合添加到firebase颤振中的所有用户文档?

颤振谷歌地图和火力基地不能一起工作

我必须从哪里找到 DatabaseEvent 类? (颤振)(火力基地)

将图像从颤振上传到火力基地(没有任何反应)

如何更新数组中的地图数据?颤振火力基地

从其他特定集合中获取文档计数颤振火力基地