我的数据结构如下:
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告诉我,如果我为此查询创建一个复合索引并告诉我如何创建它,这没有问题。 这对我来说是不可能的,因为标签是用户生成的,据我所知,我不能以编程方式创建复合索引。
我不确定使用子集合而不是对象时是否会有所不同。
查询用户生成内容的可能方法是什么?
答案 0 :(得分:0)
当我阅读documentation时,只需将等于运算符==
与范围运算符组合在一起时,您只需要一个自定义索引。 >
。
您还可以链接多个where()方法以创建更具体的查询(逻辑AND)。但是,要将等于运算符(==)与范围比较(<,< =,>或> =)组合在一起,请确保创建自定义索引。
因此您的查询应该是有效的。无需创建任何自定义索引。
如果要动态查询标记,则可以(假设您使用的是ES6)执行以下操作:
ref.
.where(`tags.${tag}`, '==', true)
.orderBy('rating', 'desc')
.limit(5)