【问题标题】:How can I order by an array element with angular如何按具有角度的数组元素排序
【发布时间】:2021-08-12 19:07:24
【问题描述】:

我有这个 firebase 文档,我想从 name 数组的第一个元素开始按文本字段排序,所以是正式名称。

这是我尝试使用的代码,但它不起作用:

get(collectionName: string): Observable<T[]> {
    return this.afs.collection(collectionName, ref => {
      let query: CollectionReference | Query = ref;
      query = query.orderBy('text', 'asc').where('name', 'array-contains', 'official');
      return query;
    }).valueChanges() as Observable<T[]>;
}

【问题讨论】:

  • 您是否为该特定查询启用了索引?
  • 因为我可以看到您在这里使用复合查询(在您的情况下有多个查询 2 查询,即 orderBy 和 where)
  • 更具体地说,您的查询正在为您提供预期的结果而不是订购或根本没有得到任何结果?我问这个是因为我相信您尝试使用 Firestore 进行的查询是不可能的。
  • 我没有得到任何结果,我什至不知道我是否需要在哪里。我想要做的就是按名称[0].text

标签: angular typescript firebase google-cloud-firestore


【解决方案1】:

使用 Firestore 无法通过数组内的对象值进行查询和排序,至少不能直接进行,正如您在 community answer 中看到的那样:

array-contains 操作检查数组是否包含特定(完整)值。它无法检查对象数组是否包含具有特定属性值的项。

这同样适用于orderBy。因此,为了做到这一点,您将需要更改 Firestore 结构,一种可能是创建一个单独的非数组字段来保存查询应该被排序/查询的值,您还可以创建一个子集合来表示数组的值,但这取决于您的结构。

【讨论】:

猜你喜欢
  • 2020-04-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
  • 1970-01-01
  • 2015-06-19
相关资源
最近更新 更多