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
を持つドキュメントを取得し、そのスコアをコンソールに出力します。サブコレクションとフィールド名がプロジェクトによって異なる場合は、適宜読み替えてください。
0 件のコメント:
コメントを投稿