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

Javascript 使用值映射的Firestore查询在修改映射时不会调用侦听器,javascript,google-cloud-firestore,Javascript,Google Cloud Firestore,由于“集合组查询”尚未在Firestore上实现,我将使用值映射作为解决方法。结构如下: /chat/[room_id]/ user[ user_id ] = true 查询类似于: db.collection( 'chat' ) .doc( room_id ) .where( 'user.' + user_id, "==", true ) .onSnapshot( ... ) 它们可以完美地进行查询,但如果“用户映射”添加或删除“用户id”字段

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

/chat/[room_id]/
                 user[ user_id ] = true
查询类似于:

db.collection( 'chat' )
  .doc( room_id )
  .where( 'user.' + user_id, "==", true )
  .onSnapshot( ... )
它们可以完美地进行查询,但如果“用户映射”添加或删除“用户id”字段,则不会调用侦听器(onSnapshot)。在Firebase控制台上,该值闪烁,表示已进行更改

根据文档,地图是自动编入索引的,所以这不应该是索引问题

有什么想法吗?

看看我们可以看到:

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

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

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


尽管不理想,但它在某些情况下可能有用。

Cloud Firestore现在支持集合组查询:我在这里没有看到多个字段的查询。所以我不确定这是怎么回事。