搜尋

首頁  >  問答  >  主體

試著列出 Firestore 資料庫的集合

<p>我想列出 Ionic4 應用程式內的 Firestore 資料庫集合,因此我使用 listCollection 部分中的文檔,因此我在程式碼中應用了範例程式碼:</p> <pre class="brush:php;toolbar:false;">this.afs.firestore.listCollections().then(collections => { for (let collection of collections) { console.log(`Found collection with id: ${collection.id}`); } });</pre> <p>這是我的建構子:</p> <pre class="brush:php;toolbar:false;">constructor(private router: Router, private afs: AngularFirestore, private fireauth: AngularFireAuth) { }</pre> <p>我收到此錯誤:錯誤 TS2339:「Firestore」類型上不存在屬性「listCollections」。 </p> <p>我無法使用屬性 listCollections,因為它位於線上文件... </p>
P粉546179835P粉546179835498 天前586

全部回覆(1)我來回復

  • P粉265724930

    P粉2657249302023-08-25 19:54:35

    實際上,如 Firestore JS SDK 文件 中所述,使用行動/網路用戶端程式庫無法檢索集合清單

    這不僅適用於 Firestore 資料庫的根集合,也適用於 Firestore 文件的子集合。

    但是,如您在問題中提到的,可以使用 Cloud Firestore Node.js 用戶端 API。因此,您可以使用 Cloud Function 來列出 Firestore 資料庫的集合並從前端呼叫此雲端函數。

    由於您將從應用程式中呼叫此雲端函數,因此我們使用可呼叫雲函數 .

    雲端函數程式碼

    const functions = require('firebase-functions');
    const admin = require('firebase-admin');
    
    admin.initializeApp();
    
    exports.getCollections = functions.https.onCall(async (data, context) => {
    
        const collections = await admin.firestore().listCollections();
        const collectionIds = collections.map(col => col.id);
    
        return { collections: collectionIds };
    
    });

    前端程式碼

    要從 Angular 應用程式呼叫此可呼叫雲函數,只需遵循 Angularfire 雲函數文件

    import { Component } from '@angular/core';
    import { AngularFireFunctions } from '@angular/fire/functions';
    
    @Component({
      selector: 'app-root',
      template: `{ data$  | async }`
    })
    export class AppComponent {
      constructor(private fns: AngularFireFunctions) { 
        const callable = fns.httpsCallable('getCollections');
        this.data$ = callable({ .... });
      }
    }

    請注意,此方法的靈感來自以下文章,介紹如何使用 JS SDK 列出 Cloud Firestore 文件的所有子集合。 (免責聲明:我是作者)

    回覆
    0
  • 取消回覆