web-dev-qa-db-ja.com

Firestore +クラウド関数:別のドキュメントから読み取る方法

別のドキュメントから読み取るGoogleクラウド関数を記述しようとしています。 (他のドキュメント=クラウド機能をトリガーしたドキュメントではありません。)

そのような単純なことを行う方法を理解することは、ちょっとした宝探しです。

  1. クラウド機能のドキュメントは、管理SDKを確認するように提案しているようです。「DeltaDocumentSnapshotインターフェイスまたは管理SDKを使用して、Cloud Firestoreを変更できます。」

    https://firebase.google.com/docs/functions/firestore-events

  2. Admin SDKは、クライアントを取得するために次のコード行を記述することを推奨しています。しかし、ああ、それはクライアントを説明するつもりはありません。ドキュメントのどこかで野生のガチョウの追跡に私たちを送ります。

    var defaultFirestore = admin.firestore();

    「アプリが提供されていない場合のデフォルトのFirestoreクライアント、または提供されたアプリに関連付けられているFirestoreクライアント。」

    https://firebase.google.com/docs/reference/admin/node/admin.firestore

  3. そのリンクは、次のことを理解するための直接の手がかりがない一般的な概要ページに解決されます。

    https://cloud.google.com/nodejs/docs/reference/firestore/0.10.x/

  4. 周辺を掘り下げて、FireStoreClientと呼ばれる有望なクラスがあります。有望に思える 'getDocument'メソッドがあります。パラメータは複雑に見えます。単にパスをメソッドに渡すのではなく、ドキュメント/コレクション全体をパラメータとして必要とするようです。

    https://cloud.google.com/nodejs/docs/reference/firestore/0.10.x/FirestoreClient#getDocument

    var formattedName = client.anyPathPath("[PROJECT]", "[DATABASE]", "[DOCUMENT]", "[ANY_PATH]"); client.getDocument({name: formattedName}).then(function(responses) { var response = responses[0]; // doThingsWith(response) })

したがって、私はこの情報のすべてを、別のドキュメントから読み取るGoogleクラウド機能に結合しようとしています。

const functions = require('firebase-functions');

const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.updateLikeCount4 = functions.firestore
    .document('likes/{likeId}').onWrite((event) => {
        return admin.firestore()
            .getDocument('ruleSets/1234')
            .then(function(responses) {
                 var response = responses[0];
                 console.log('Here is the other document: ' + response);
             })
    });

そのアプローチは失敗します:

admin.firestore.getDocument is not a function

私も試しました。 admin.firestore.document、admin.firestore.doc、admin.firestore.collection、その他多数。それらはいずれも関数ではないようです。

私が欲しいのは、Googleクラウド機能の別のFirestoreドキュメントから読み取ることだけです。

PS:彼らは、ドキュメントはあなたの友達だと言った。このドキュメントは、すべての手がかりを風の4方向に散らすという原則に従う悪夢です!

10
Thomas Fischer

ありがとう、@ frank-van-puffelen。

これは実用的なソリューションです:

exports.updateLikeCount = functions.firestore
    .document('likes/{likeId}').onWrite((event) => {
        return admin.firestore()
            .collection('ruleSets')
            .doc(1234)
            .get()
            .then(doc => {
                console.log('Got rule: ' + doc.data().name);
            });
    });
10
Thomas Fischer