Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase Flatter Firestore扩展文档数据_Firebase_Flutter_Google Cloud Firestore - Fatal编程技术网

Firebase Flatter Firestore扩展文档数据

Firebase Flatter Firestore扩展文档数据,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我有一个简单的应用程序,它使用Firestore作为数据源。在学习了Google关于如何构建更好的数据库的教程之后,我开始将我的对象分为多个表(或者他们如何称之为集合)并使用数据引用 让我给你举个简单的例子。假设我有两个集合(数据表) 购物类别 购物物品 逻辑是,在ShoppingItems下,我可以存储所有物品,而不考虑类别(例如牛奶、面包、家禽、葡萄酒等),但在我的ShoppingCategories中,我创建属于它们的产品类别(例如日记、水果、肉类等)和参考物品 以下是数据模型在颤振中

我有一个简单的应用程序,它使用Firestore作为数据源。在学习了Google关于如何构建更好的数据库的教程之后,我开始将我的对象分为多个表(或者他们如何称之为集合)并使用数据引用

让我给你举个简单的例子。假设我有两个集合(数据表)

  • 购物类别
  • 购物物品
逻辑是,在
ShoppingItems
下,我可以存储所有物品,而不考虑类别(例如牛奶、面包、家禽、葡萄酒等),但在我的
ShoppingCategories
中,我创建属于它们的产品类别(例如日记、水果、肉类等)和参考物品

以下是数据模型在颤振中的样子:

class ShoppingCategory {
    DocumentReference reference;
    String title;
    List<ShoppingItem> items;
}

class ShoppingItem {
    DocumentReference reference;
    String title;
}
我确实会得到所有购物类别的财产
项目
;但是,它的类型将仅为
DocumentReference
。为了检索这些购物项目的详细信息,我需要额外调用
Firestore
(针对每个子项目)并请求其详细信息

我的问题是:


有没有办法更有效地做到这一点?例如,如果我使用的是Entity Framework,我会在我的
项目
集合上调用
.expand()
方法,它会动态获取所有必要的详细信息-因此在一次调用中,我获得了所有的详细信息。我可以在Flatter-Firestore中这样做吗?

不,那是不可能的。Firestore在设计上没有连接,客户端SDK也没有

如果您需要在一次操作中获取所有项目和类别,我将对其进行如下建模:

Firestore.instance.collection('items').where('category.id', isEqualTo: "dairy").getDocuments();
{}表示文档id

shopping_categories/{dairy}
  {name: "Dairy"}

items/{milk}
  {
    category: {
      id: "dairy",
      data: {name: "Dairy"}
    },
    name: "Milk"
  }
items中的数据字段是可选的,您也可以这样做:

  {
    category: {
      id: "dairy",
      name: "Dairy"
    },
    name: "Milk"
  }
这样,您可以像这样查询它:

Firestore.instance.collection('items').where('category.id', isEqualTo: "dairy").getDocuments();
通过将所有内容保存在一个文档中,您可以在一次操作中获得项目和类别。这通常比较便宜,尤其是如果你只买一件的话

这是文档数据库的一个优点,您可以以一种更高效的方式保存文档,因为您只需要读取一个实体,而不需要读取多个实体