👯‍♀️

Firestoreでdefault以外のデータベースにデータの追加・取得・削除を行う[JavaScript]

2024/05/09に公開

TL;DR(要約)

ライブラリ初期化時の、getFirestore でデータベース名を指定するだけ。

import { initializeApp } from "firebase/app";
import { getFirestore } from "firebase/firestore";

const firebaseConfig = { // 接続設定 };

// Initialize Firebase
const app = initializeApp(firebaseConfig);

// ↓ここでデータベース名指定
const db = getFirestore(app, "ここにデータベース名を入れる");

// (default)に接続するときは、指定する必要がない
const db = getFirestore(app);

はじめに

Firestoreで複数のデータベースを作成できます。
Firestoreで複数のデータベースを作成した際のデータ操作を行ってみましょう。

複数のデータベースを作る

蛇足ですが、データベースは管理画面から簡単に作れます。



ここでは、 multi-database-test という名前のデータベースを作りました。
こちらにアクセスします。

JSからのアクセス

データベースにデータの追加・取得・削除を実行してみましょう。

packageを取得していない場合は取得

npm install firebase

Firestoreインスタン初期化時にデータベース名を指定し、あとはドキュメント通り各種操作が実行できます。
getFirestore(firebase_app, "(データベース名)");

プログラムの操作例は以下です。


import { initializeApp } from 'firebase/app';
import { getFirestore, doc, getDoc, setDoc, updateDoc, deleteDoc } from 'firebase/firestore/lite';

const firebaseConfig = {
    // 接続設定
};

const firebase_app = initializeApp(firebaseConfig);

/*
* Firestore のデータベースを取得
* ここで、データベース名を指定する(今回の場合は "multi-database-test")
*/
const firestore_db = getFirestore(firebase_app, "multi-database-test");


// ドキュメントを取得してコンソールに出力
const main = async (db) => {

    // 操作するコレクション名
    const collection_name = "test_collection";

    /*
    * データ書き込み例
    *
    * ドキュメント"add_doc_test1" に {name: "hogehoge", comment: "fugafuga", state: 1} を保存
    */
    const add_doc_name  = "add_doc_test1";// 保存するドキュメント名

    // 書き込み実行
    await setDoc(doc(db, collection_name, add_doc_name), {
        name: "hogehoge",
        comment: "fugafuga",
        state: 1
    });

    // ---

    /*
    * データ更新例(既存のフィールドはそのままに、新しいフィールドを追加する)
    *
    * ドキュメント"update_doc_test1" に {name: "hogehoge", comment: "fugafuga", state: 2} を保存
    */
    const update_doc_name  = "update_doc_test1";// 更新するドキュメント名
    await updateDoc(doc(db, collection_name, update_doc_name), {
        name: "hogehoge",
        comment: "fugafuga",
        state: 2
    });

    // ---

    /*
    * データ読み取り例
    *
    * ドキュメント"read_doc_test1" の内容を取得
    */
    const read_doc_name  = "read_doc_test1";// 取得対象のドキュメント名

    // 取得実行
    const doc_snap = await getDoc( doc(db, collection_name, read_doc_name) );

    // 取得内容をコンソールに出力
    if (doc_snap.exists()) {
        const data_obj = doc_snap.data();
        const data_json_string = JSON.stringify(data_obj);
        console.log(`Document data:${data_json_string}`);
    }else{
        console.log("No such document!");
    }

    // ---

    /*
    * データ削除例
    *
    * ドキュメント"del_doc_test1" の内容を削除
    */
    const del_doc_name  = "del_doc_test1";// 削除するドキュメント名

    // 削除実行
    await deleteDoc( doc(db, collection_name, del_doc_name)  );
}

main(firestore_db);

おまけ:サーバサイド

サーバでNode JSを実行する場合。
(Cloud Runやfunctionsで実行する場合は、"接続情報"は必要ない)

データベース"multi-database-test"に接続する例

firebase-admin/appライブラリを使用する場合

import記法の場合

import { initializeApp } from 'firebase-admin/app';
import { getFirestore } from 'firebase-admin/firestore';

const firebase_app = initializeApp();
const firestore_db = getFirestore(firebase_app, "multi-database-test");
require記法の場合
const { initializeApp } = require('firebase-admin/app');
const { getFirestore } = require('firebase-admin/firestore');

const firebase_app = initializeApp();
const firestore_db = getFirestore(firebase_app, "multi-database-test");

@google-cloud/firestoreライブラリを使用する場合

import記法の場合
import { Firestore } from '@google-cloud/firestore';

const firestore = new Firestore({"databaseId" : "multi-database-test"});
require記法の場合
const Firestore = require('@google-cloud/firestore');

const firestore = new Firestore({"databaseId" : "multi-database-test"});

おわり。

Discussion