Firebase v9でサブコレクションから最大値を取得する方法

2024年4月13日土曜日

Firebase javascript

t f B! P L

enter image description here

Firebase SDK バージョン9(モジュール方式のSDK)を使用してサブコレクションから最大値を取得する方法について解説します。この記事では、Firestore データベースの使用例として、各ユーザーが持つ scores というサブコレクションから最高スコアを取得する方法を示します。

まず、Firebase プロジェクトの設定と Firestore の初期化が必要です。そして、サブコレクション内のドキュメントから特定のフィールドの最大値をクエリする方法を見ていきます。

1. Firebase プロジェクトのセットアップ

Firebase プロジェクトの設定を行い、Firestoreを初期化します。プロジェクトの設定には、Firebase コンソールでプロジェクトを作成し、アプリを登録して設定スニペットを取得します。

// Firebase SDK のインポート
import { initializeApp } from 'firebase/app';
import { getFirestore } from 'firebase/firestore';

// Firebase 設定
const firebaseConfig = {
  apiKey: "YOUR_API_KEY",
  authDomain: "YOUR_AUTH_DOMAIN",
  projectId: "YOUR_PROJECT_ID",
  storageBucket: "YOUR_STORAGE_BUCKET",
  messagingSenderId: "YOUR_MESSAGING_SENDER_ID",
  appId: "YOUR_APP_ID"
};

// Firebase アプリの初期化
const app = initializeApp(firebaseConfig);

// Firestore の初期化
const db = getFirestore(app);

2. サブコレクションから最大値を取得

Firestore では直接的な「最大値」を取得するクエリはサポートされていませんが、ドキュメントを特定のフィールドで降順に並べて最初のドキュメントを取得することで、最大値を取得できます。

import { collection, query, where, orderBy, limit, getDocs } from 'firebase/firestore';

async function getMaxScore(userId) {
  // ユーザーのスコアサブコレクションへのパス
  const scoresRef = collection(db, "users", userId, "scores");

  // スコアを降順に並べて最上位のドキュメントを取得
  const q = query(scoresRef, orderBy("score", "desc"), limit(1));

  // クエリを実行
  const querySnapshot = await getDocs(q);
  
  if (querySnapshot.empty) {
    console.log('No matching documents.');
    return;
  }

  // 最大スコアを持つドキュメントを取得
  querySnapshot.forEach((doc) => {
    console.log(`Highest score: ${doc.data().score}`);
  });
}

// 任意のユーザーIDを使って関数を呼び出す
getMaxScore("your-user-id");

この関数は、指定されたユーザーIDに対応する scores サブコレクションの中で最も高い score を持つドキュメントを取得し、そのスコアをコンソールに出力します。サブコレクションとフィールド名がプロジェクトによって異なる場合は、適宜読み替えてください。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ