Javascript Firebase:获取聊天室(或任何抽象资源)中当前的用户数量

Javascript Firebase:获取聊天室(或任何抽象资源)中当前的用户数量,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我有一个webapp,用户可以加入不同数量的聊天室。 firestore集合如下所示: chatrooms: { "g4HL09vHfkaO3": { "name": "Chatroom 1", "messages": ... }, "lpScgY74gHJ87": { "name": "Chatroom 2", "messages": ... } } unsubscribe() 当用户加入聊天室时,webapp将按顺序将侦听器

我有一个webapp,用户可以加入不同数量的聊天室。 firestore集合如下所示:

chatrooms: {
   "g4HL09vHfkaO3": {
     "name": "Chatroom 1",
     "messages": ...
   },
   "lpScgY74gHJ87": {
     "name": "Chatroom 2",
     "messages": ...
   }
}
unsubscribe()
当用户加入聊天室时,webapp将按顺序将侦听器附加到给定文档 获取消息并接收传入消息,例如:

unsubscribe = firebase
  .firestore()
  .collection("chatrooms")
  .doc("g4HL09vHfkaO3")
  .onSnapshot( ... )
当用户离开聊天室时,应用程序将如下分离侦听器:

chatrooms: {
   "g4HL09vHfkaO3": {
     "name": "Chatroom 1",
     "messages": ...
   },
   "lpScgY74gHJ87": {
     "name": "Chatroom 2",
     "messages": ...
   }
}
unsubscribe()
现在,我的目标是在应用程序中显示给定聊天室中当前的用户数量,因此问题是:

  • 是否可以从firebase获得连接到聊天室等g4HL09vHfkaO3的全球侦听器数量
  • 如果不是,实现我想要的最直接的方法是什么

有一种方法可以获取附加到父对象的对象数

您可以收听聊天室集合并使用firebase提供的名为numChildren()的方法获取使用聊天室的用户列表的总大小

详细说明的参考链接为:

Firestore没有向集合返回侦听器数量的公共API。如果您想知道聊天室中的人数,您可以:

  • 在每个文件室文档中保留一个计数器,每个用户递增或递减
  • 使用实时数据库为每个房间构建状态系统。文档中将其描述为解决方案:

  • 谢谢你的回答,你能详细说明一下吗?我的
    聊天室
    集合中没有用户列表,因此我不了解您的解决方案是如何应用的,不需要列表。此函数考虑父层次结构下的所有对象。从我在文档()中看到的内容来看,这似乎与我的需要无关。使用该方法,我可以获得聊天室文档的属性,即2(名称和消息),但不是监听快照的用户数。当您监听g4HL09vHfkaO3用户,然后使用numChildren时,它将读取名称和消息,但如果您读取聊天室集合并使用numChildren,则您将获得用户数。嘿,Minal。您提供的链接指向实时数据库的文档,而Etiardo正在使用CloudFireStore。虽然两者都没有内置计数运算符,但API和文档是不同的。据我所知,计数器的问题是,在客户端崩溃或其他故障时,计数器不会减少。我希望找到比与实时数据库同步更容易实现的方法,但我认为这是目前的标准方法。谢谢你的回复!事实上,Firestore的无连接线协议基本上不能很好地处理脏的断开连接。这就是为什么推荐的解决方案使用实时数据库,在引擎盖下使用Web套接字进行检测是可行的。