是否可以从FireStore快照自动生成的ID文档?

时间:2020-10-02 15:13:48

标签: javascript firebase vue.js google-cloud-firestore

我目前正在为我的Final Year Project(相对于Firestore而言相对较新)使用一个单一的Firestore开发移动应用程序和Web应用程序。

当客户从移动应用程序注册到应用程序时,数据将存储在“用户”集合下,该集合是代表每个唯一客户[Document]的生成的唯一ID,然后是“个人资料”和“订单”存储了他们的详细信息。

客户成功注册后的当前Firestore设置: Current Firestore setup after a customer have successfully registered

现在,我正在尝试在Web应用程序中显示“配置文件”的子集合。我已经成功地做到了,但是我仅限于一个用户。

created() {
        db.collection('users/FbkKmQMaGYY2gErEneImmjUMvRt1/profile').onSnapshot((snapshotChange) => {
            this.Users = [];
            snapshotChange.forEach((doc) => {
                this.Users.push({
                    key: doc.id,
                    fname: doc.data().fname,
                    lname: doc.data().lname,
                    username: doc.data().username,
                    mail: doc.data().mail,
                    phone: doc.data().phone,
                    adress: doc.data().adress,
                    img: doc.data().img,
                })
            });
        })
    },

我的问题:是否可以使用任何方法来调用所有子集合“配置文件”(如上图所示),以便可以出于管理目的将其显示在Web应用程序中。

谢谢您的帮助! :)

1 个答案:

答案 0 :(得分:0)

如果要在所有用户中显示所有配置文件,则可以使用集合组查询:

    <?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" >
            <!--android:theme="@style/defaultTitleTheme"
            app:titleTextColor="@color/white"-->
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:paddingStart="@dimen/icon_size"
                android:text="@string/title_home"
                style="@style/defaultTitleTheme"
                tools:ignore="RtlSymmetry" />
        </androidx.appcompat.widget.Toolbar>
    </com.google.android.material.appbar.AppBarLayout>

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</androidx.coordinatorlayout.widget.CoordinatorLayout>

其余代码可以保持不变。

现在,这将从名为db.collectionGroup('profile').onSnapshot((snapshotChange) => { 的所有集合中获取所有文档。

请注意,无法仅在profile下获得profile集合,因此必须确保集合名称足够唯一/特定。