Cloud Firestore通过引用从另一个集合中获取集合

时间:2018-12-21 18:42:15

标签: java android firebase google-cloud-firestore

我有一个名为LinkError: pre-link script failed for package defaults::mpi4py-2.0.0-py36_1的集合,另一个有名为Products的集合。

Category文档的一个字段Products,引用类别的ID。

我想从idCategory获取所有文档,其中类别名称等于“ Soda”。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

您似乎会进行简单的查询(Firebase Docs Reference):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:id="@+id/root_fragment2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv_fragment2"
        android:paddingTop="150dp"
        android:paddingBottom="10dp"
        android:paddingStart="10dp"
        android:paddingEnd="10dp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="vertical"
        android:splitMotionEvents="false"
        android:clipToPadding="false"/>

</LinearLayout>

答案 1 :(得分:0)

  

我想从类别名称等于“ Soda”的产品中获取所有文档。

由于在单个文档中没有所有数据,因此需要两次查询数据库。一旦获得该类别的ID(在这种情况下为“苏打”),然后根据该ID获得相应的产品。这是因为Firestore不支持跨多个集合的查询。单个查询只能使用单个集合中的文档属性。

为什么要查询两次数据库,当您一次查询并获得所需文档时,这也是昂贵的。为此,您需要对数据库架构进行一些更改。由于单个产品可能属于多个类别,因此您的新架构应如下所示:

Firestore-root
    |
    --- products (collection)
          |
          --- productId (document)
                |
                --- productName: "Soda Water"
                |
                --- category: ["Soda", "Other Category"]
                |
                --- //Other properties

要获取Soda类别以外的所有文档,请使用以下代码行:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference productsRef = rootRef.collection("products");
Query query = productsRef.whereArrayContains("category", "Soda");

编辑:您也可以保留引用而不是仅保留ID,为此,请从此 post 中查看我的答案。