Firestore OrderBy和过滤器无法一起使用的地方

时间:2019-10-06 22:09:49

标签: javascript google-cloud-firestore angularfire2

如果我查询我的users集合并按2个不同的属性进行过滤(如下所示),它将返回预期的数据。

return this.afs
  .collection<Employee>('users', ref => {
    return ref
      .where('accountId', '==', accountId)
      .where('isEmployee', '==', true);
  })
  .valueChanges()

但是,如果我尝试按name排序数据,如下所示,它将返回一个空数组。

return this.afs
  .collection<Employee>('users', ref => {
    return ref
      .where('accountId', '==', accountId)
      .where('isEmployee', '==', true)
      .orderBy('name');
  })
  .valueChanges()

我认为我必须管理索引的处理方式,但做了一些研究,我的理解是,如果是这种情况,我会在控制台中收到一条错误消息,其中包含用于设置复合索引的链接我需要的索引。我没有任何错误,只是一个空数组。我究竟做错了什么?是否可以订购按2个属性过滤的数据集合?我相信我使用的是Firebase 6.5版,但愿意更新是否可以解决我的问题。

2 个答案:

答案 0 :(得分:1)

  

我会在控制台中看到一条错误消息,其中包含一个链接,用于设置所需的复合索引。

是的,这是正确的。当您使用类似查询的查询时,控制台中应显示一条警告消息。

  

我没有任何错误,只是一个空数组。

在这种情况下,您应该在Firebase console中手动创建该索引。

  

是否可以订购按2个属性过滤的数据集合?

可以。只需创建所需的索引,然后您应该能够执行查询。

答案 1 :(得分:0)

您似乎并没有准备好抓住错误。可能想做类似的事情:

.catch(错误=> console.log(错误)

(在台式机上会格式化)