Firestore查询其中一个字段大于Greater,另一个字段OrderBy

时间:2020-08-01 08:51:48

标签: google-cloud-firestore

我想查询位置字段条件满足isGreaterTHenOrEqualTo和isLessThanOrEqualTo的集合中的所有文档,并以“人口”字段(即数字)的降序对这些文档进行排序,并获得居前十位的人口。

_firestore.collectionGroup(_collectionGroupName)
          .where("location",isGreaterThanOrEqualTo: lowGeoPoint)
          .where("location",isLessThanOrEqualTo: highGeoPoint)
          .orderBy("population", descending: true)
          .limit(10)
          .get();

Firestore给出了例外,我需要首先添加.orderBy(“ location”),如果我这样做并为该查询添加复合索引,则它仅通过按位置对文档进行排序并按人口进行排序就可以工作,但是我不希望这样做订购地点。我只想通过“填充”来订购。是否有一些解决方法?

1 个答案:

答案 0 :(得分:0)

这是Firestore中的限制。您不能按一个字段过滤,而不能按该顺序过滤另一个字段。他们必须是同一个领域。工作人员会添加另一个orderby条件,因为此限制仅适用于第一个orderby。这样做:

_firestore.collectionGroup(_collectionGroupName)
          .where("location",isGreaterThanOrEqualTo: lowGeoPoint)
          .where("location",isLessThanOrEqualTo: highGeoPoint)
          .orderBy("location", descending: true)
          .orderBy("population", descending: true)
          .limit(10)
          .get();

请记住,您需要为此查询创建一个复合索引。

相关问题