如何使用firebase-admin与非默认Firestore数据库交互?
问题描述
我目前有一个通过firebase-admin对接Firestore数据库的应用,示例代码如下:
const admin = require("firebase-admin"); admin.initializeApp(); const db = admin.firestore(); const citiesRef = db.collection('cities'); const snapshot = await citiesRef.where('capital', '==', true).get(); if (snapshot.empty) { console.log('No matching documents.'); return; } snapshot.forEach(doc => { console.log(doc.id, '=>', doc.data()); });
我借助Firestore Multiple Databases功能创建了第二个数据库,但不清楚如何通过firebase-admin指定特定数据库。
谷歌博客中有如下Java示例:
// Initialize Firebase App FirebaseApp app = FirebaseApp.getInstance(); // Initialize Firestore Database with database id `test` FirebaseFirestore db = FirebaseFirestore.getInstance(app, "test") // Document Reference DocumentReference docRef = db.collection("col").document("doc"); // Write Document waitFor(docRef.set(Collections.singletonMap("foo", "bar")));
但该示例依赖firebase-firestore依赖,而我目前无需引入此依赖。
我希望能在数据库间切换,因为可能需要获取两个数据库的数据。另外,我本地使用模拟器,部署到多个远程实例,因此在admin.initializeApp中硬编码数据库URL并非可行方案。
请问通过firebase-admin能否实现该需求?
解决方案
可以通过firebase-admin实现多数据库切换,无需额外引入firebase-firestore依赖,具体实现如下:
初始化指定数据库的Firestore实例
在Node.js的firebase-admin SDK中,admin.firestore()方法支持传入配置对象,通过databaseId字段指定目标数据库ID:const admin = require("firebase-admin"); admin.initializeApp(); // 连接默认数据库 const defaultDb = admin.firestore(); // 连接自定义ID的第二个数据库 const secondaryDb = admin.firestore({ databaseId: "你的第二个数据库ID" });跨数据库操作
初始化完成后,两个数据库实例的使用方式完全一致,可直接切换进行读写操作:// 查询第二个数据库中的数据 const secondaryCitiesRef = secondaryDb.collection('cities'); const secondarySnapshot = await secondaryCitiesRef.where('capital', '==', true).get(); if (secondarySnapshot.empty) { console.log('第二个数据库中无匹配文档。'); return; } secondarySnapshot.forEach(doc => { console.log(doc.id, '=>', doc.data()); });适配多环境场景
这种方式无需硬编码数据库URL:- 本地使用Firestore模拟器时,SDK会自动关联模拟器中对应
databaseId的数据库 - 部署到远程实例时,会根据项目配置自动匹配对应ID的远程Firestore数据库
- 本地使用Firestore模拟器时,SDK会自动关联模拟器中对应
通过上述方式即可轻松在多个数据库间切换,满足跨库数据获取的需求。
内容的提问来源于stack exchange,提问作者Simon Baars
相关产品推荐
相关产品推荐

