Firebase新手疑问:Admin.firestore与functions.firestore的区别及相关问题
解答你的Cloud Function & Firebase SDK疑惑
嘿,刚接触Cloud Function的时候确实容易被这些相似的API搞混,我来帮你逐个理清:
1. admin.firestore 和 functions.firestore 的区别
这俩完全是不同用途的东西:
admin.firestore:属于Firebase Admin SDK的一部分,是用来在函数里主动读写Firestore数据的工具。比如你写了一个HTTP触发的函数,需要从Firestore里拉取数据,或者定时任务里要更新某个文档,就用它。示例:const admin = require('firebase-admin'); admin.initializeApp(); // 主动获取某个文档 const docRef = admin.firestore().collection('posts').doc('post123'); const docSnap = await docRef.get();functions.firestore:属于Cloud Functions SDK的一部分,是用来定义Firestore触发器的——也就是当Firestore里的文档发生新增、更新、删除等操作时,自动触发你的Cloud Function。它本身不负责读写数据,只是用来设置触发条件。示例:const functions = require('firebase-functions'); // 当users集合下有新文档创建时触发函数 exports.onUserCreated = functions.firestore .document('users/{uid}') .onCreate((snap, context) => { // 这里如果要读写数据,还是得用admin.firestore const userData = snap.data(); return admin.firestore().collection('logs').add({ action: 'user_created', uid: context.params.uid }); });
2. admin.database 是否对应实时数据库?
没错!Firebase有两个核心数据库服务:Cloud Firestore(文档型数据库)和Realtime Database(实时同步的JSON数据库)。
admin.firestore()是Admin SDK操作Cloud Firestore的入口admin.database()就是Admin SDK操作Realtime Database的入口
比如要读写实时数据库的数据:
// 获取实时数据库的根引用 const dbRef = admin.database().ref(); // 写入数据 await dbRef.child('users/uid123').set({ name: 'Alice' });
3. document('some/doc') 和 doc('doc') 的差异
这是因为Firebase有两套不同风格的SDK:
- 命名空间风格(旧版):比如早期的Admin SDK或者客户端SDK,用链式调用的方式,比如
admin.firestore().collection('col').document('docId'),这里的document()是CollectionReference对象上的方法。 - 模块化风格(新版):Firebase后来推出了模块化SDK,支持树摇(减小打包体积),API变成了独立的函数,比如你需要先导入
doc函数,然后doc(db, 'col', 'docId')或者doc(db, 'col/docId'),这里的doc()是独立的顶级函数。
这两种写法功能完全一致,都是用来获取Firestore文档的引用,只是API设计风格不同。文档里同时出现两种写法,是因为有些教程还在沿用旧版SDK的示例,而新文档会优先展示模块化SDK的写法。
内容的提问来源于stack exchange,提问作者Ferda Nahit FIDANCI
相关产品推荐
相关产品推荐

