如何使用firebase admin sdk获得firestore中更改的通知

rt4zxlrg  于 2022-12-04  发布在  其他
关注(0)|答案(1)|浏览(188)

我正在制作一个聊天应用程序,用户需要在新的通知到来时得到通知。所以我正在使用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是每个用户的朋友的平均数量。

bkhjykvo

bkhjykvo1#

使用Firestore的SDK,只有两种方法可以监听集合或查询:
1.用firestore.collection('exact/path/to/the/collection').onSnapshot对单个集合进行处理。
1.到一个集合组,该集合组侦听具有特定名称的所有集合,使用firestore.collectionGroup('collectionName').onSnapshot
在这两种情况下,您都可以使用查询来限制结果,而在集合组查询的情况下,您可以对此进行调整以侦听特定路径,如以下问题的答案所示:CollectionGroupQuery,但将搜索限制为特定文档下的子集合
除此之外,没有办法监听类似于云函数所允许的路径结构。

相关问题