Firestore:过滤用户生成的内容

时间:2017-11-05 13:12:19

标签: firebase angularfire2 google-cloud-firestore

我的数据结构如下:

collection
-- id_1 (document)
---- rating : 0
---- date : 1506266576364
---- tags : { car : true, boat : true }
-- id_2 (document)
---- rating : 1
---- date : 1506266540000
---- tags : { car : true, plane : true }

我的查询如下:

ref
.where('tags.car', '==', true)
.orderBy('rating', 'desc')
.limit(5)

单词:我想检索所有已分配给定标签的文件,按评级排序,限制为5.所以这是使用此标签评分的前5名。

Firestore告诉我,如果我为此查询创建一个复合索引并告诉我如何创建它,这没有问题。 这对我来说是不可能的,因为标签是用户生成的,据我所知,我不能以编程方式创建复合索引。

我不确定使用子集合而不是对象时是否会有所不同。

查询用户生成内容的可能方法是什么?

1 个答案:

答案 0 :(得分:0)

当我阅读documentation时,只需将等于运算符==与范围运算符组合在一起时,您只需要一个自定义索引。 >

  

您还可以链接多个where()方法以创建更具体的查询(逻辑AND)。但是,要将等于运算符(==)与范围比较(<,< =,>或> =)组合在一起,请确保创建自定义索引。

因此您的查询应该是有效的。无需创建任何自定义索引。

如果要动态查询标记,则可以(假设您使用的是ES6)执行以下操作:

ref.
  .where(`tags.${tag}`, '==', true)
  .orderBy('rating', 'desc')
  .limit(5)