0

FirebaseクラウドコードとFirebaseリアルタイムデータベースを使用しています。firebaseリアルタイムデータベースをクラウドコードで照会する方法

私のデータベース構造は次のとおりです。私が「本当」であるフィールド「フラグ」だユーザーのみを照会したい

-users 
     -userid32 
     -userid4734 
      -flag=true 
     -userid722 
      -flag=false 
     -userid324 

現在、私がやっていることは、すべてのユーザーを行き来し、1つずつチェックしていることです。私たちは、データベース内のユーザーの多くを持って、それを実行する機能のために10秒以上かかりますので、しかし、これは、効率的ではありません。

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

exports.test1 = functions.https.onRequest((request, response) => { 
    // Read Users from database 
    // 
    admin.database().ref('/users').once('value').then((snapshot) => { 
     var values = snapshot.val(), 
      current, 
      numOfRelevantUsers, 
      res = {};  // Result string 

      numOfRelevantUsers = 0; 

     // Traverse through all users to check whether the user is eligible to get discount. 
     for (val in values) 
     { 
      current = values[val]; // Assign current user to avoid values[val] calls. 

      // Do something with the user 
     } 

     ... 
}); 

は、このクエリを作成し、のみ取得するより効率的な方法はあります関連レコード? (?およびそれらのすべてを取得し、一つ一つをチェックしていない)

答えて

1

あなたはそのためFirebaseデータベースクエリを使用したい:

admin.database().ref('/users') 
    .orderByChild('flag').equalTo(true) 
    .once('value').then((snapshot) => { 
    const numOfRelevantUsers = snapshot.numChildren(); 

あなたは子ノードをループする必要がある場合は、扱いません通常のJSONオブジェクトとしてのスナップショットを作成してください。それがここではうまくいくかもしれませんが、実際の範囲で値を注文すると、予期しない結果が得られます。このすべてはかなり標準的なFirebaseデータベースの使用状況ですので、私はWeb SDKおよびそのためのAdmin SDK両方のドキュメントにいくつかの余分な時間を費やしてお勧めすることを

snapshot.forEach(function(userSnapshot) { 
    console.log(userSnapshot.key, userSnapshot.val()); 
} 

注:代わりにビルトインSnapshot.forEach()メソッドを使用します。

関連する問題