首页 > 解决方案 > Angular Firestore 集合查询和排序依据

问题描述

我正在执行一个简单的查询,然后想按日期排序。

这工作得很好:

this.afs.collection('orders', ref=> ref.where('orderStatus', '<', 7));

当我想过滤 orderStaus < 7 然后按日期排序时,这会引发错误。

this.afs.collection('orders', ref=> ref.where('orderStatus', '<', 7).orderBy('date', 'desc'));

这是我的错误:

You have a where filter with an inequality (<, <=, >, or >=) on field 'orderStatus' and so you must also use 'orderStatus' as your first Query.orderBy(), but your first Query.orderBy() is on field 'date' instead.

如何获得所有 ordersStatus < 7 然后按日期对订单进行排序?

标签: angulartypescriptfirebasegoogle-cloud-firestore

解决方案


Cloud Firestore 要求您首先按应用范围过滤器的字段排序,然后按您选择的任何其他字段排序。

参考https ://firebase.google.com/docs/firestore/query-data/order-limit-data

您可以通过创建范围过滤字段的复合索引和您要为正在查询的集合下一个排序的字段来实现此目的。

因此,在您的情况下,您需要使用and为orders集合创建一个复合索引。orderStatus DESCdate DESC

参考https ://firebase.google.com/docs/firestore/query-data/indexing

希望这是有用的。


推荐阅读