我正在制作一个聊天应用程序,用户需要在新的通知到来时得到通知。所以我正在使用Firebase管理SDK的快照功能。
但问题是我如何才能听到多个集合和文档内部深处的变化。
我想这么做
const admin = require("firebase-admin");
const firebaseAdminKey = require("./firebase-admin-key.json");
admin.initializeApp({
credential: admin.credential.cert(firebaseAdminKey),
databaseURL: `https://${firebaseAdminKey.project_id}.firebaseio.com`,
});
let firestore = admin.firestore();
let messeging = admin.messaging();
let storage = admin.storage();
console.log("Firebase Admin Initialized");
firestore
.collection("users")
.doc("{userID}")
.collection("chats")
.doc("{senderID}")
.collection("messages")
.onSnapshot((snapshot) => {
console.log("New Message ", snapshot.docs);
snapshot.docChanges().forEach((change) => {
console.log("New message: ", change.doc.data());
});
});
但我不工作在管理SDK
注意:-我没有将此API部署到FIREBASE云,因此无法使用FIREBASE函数
这是我所期待的,但它只在一个用户和发送者之间工作。
const admin = require("firebase-admin");
const firebaseAdminKey = require("./firebase-admin-key.json");
admin.initializeApp({
credential: admin.credential.cert(firebaseAdminKey),
databaseURL: `https://${firebaseAdminKey.project_id}.firebaseio.com`,
});
let firestore = admin.firestore();
let messeging = admin.messaging();
let storage = admin.storage();
console.log("Firebase Admin Initialized");
firestore
.collection("users")
.doc("Zcpq0NHMODTGMT2Qry53ylksmvp2")
.collection("chats")
.doc("m79kGeXHKPNEgteCqxn2RG4eytL2")
.collection("messages")
.onSnapshot((snapshot) => {
console.log("New Message ", snapshot.docs);
snapshot.docChanges().forEach((change) => {
console.log("New message: ", change.doc.data());
});
});
每个用户都有多个朋友,即发送者,所以我怎么做呢
我可以想到一种方法,即对每个用户和发送者进行itrating,但这对我的API来说是非常昂贵的,因为它的时间复杂度为O(nk)。
其中k是每个用户的朋友的平均数量。
1条答案
按热度按时间bkhjykvo1#
使用Firestore的SDK,只有两种方法可以监听集合或查询:
1.用
firestore.collection('exact/path/to/the/collection').onSnapshot
对单个集合进行处理。1.到一个集合组,该集合组侦听具有特定名称的所有集合,使用
firestore.collectionGroup('collectionName').onSnapshot
。在这两种情况下,您都可以使用查询来限制结果,而在集合组查询的情况下,您可以对此进行调整以侦听特定路径,如以下问题的答案所示:CollectionGroupQuery,但将搜索限制为特定文档下的子集合
除此之外,没有办法监听类似于云函数所允许的路径结构。