修改映射时,使用值映射的 Firestore 查询不会调用侦听器



由于"集合组查询"仍未在 Firestore 上实现,我正在使用值映射作为解决方法。结构如下:

/chat/[room_id]/
                 user[ user_id ] = true

查询类似于:

db.collection( 'chat' )
  .doc( room_id )
  .where( 'user.' + user_id, "==", true )
  .onSnapshot( ... )

它们查询工作正常,但如果"用户映射"添加或删除"user_id"字段,则不会调用侦听器 (onSnapshot(。在 Firebase 控制台上,该值会闪烁,表示已进行更改。

根据文档,地图是自动索引的,所以它不应该是一个索引问题。

知道吗?

查看文档,我们可以看到:

使用范围筛选器对多个字段进行查询需要复合 指数。不幸的是,使用所示的方法无法做到这一点。 以上。必须在特定字段路径上定义索引。你会有 在每个可能的字段路径上创建索引(例如 categories.catscategories.opinion(是不可能做到的 如果您的类别是用户生成的,则提前。

"上面显示的方法"是指使用值映射执行复合查询的情况(与您的示例相同(。他们提出的解决方案是

将查询的所有信息编码为映射值

虽然不理想,但在某些情况下可能有用。