1

我试图在我的应用程序中制作两个滑块,当他们从 Firestore 移动用户时,应该过滤并加载到 listview,我收到此错误:

未处理的异常:PlatformException(invalid_query, FIRInvalidArgumentException, Invalid query. 你有一个 where 过滤器在字段 'age' 上有一个不等式(lessThan、lessThanOrEqual、greaterThan 或 greaterThanOrEqual),因此您还必须使用 'age' 作为第一个 queryOrderedBy 字段,但是您的第一个 queryOrderedBy 当前位于“position.geohash”字段上。)

我正在使用 GeoFlutterFire 和 firestore,代码如下:

  Future<Stream<List<DocumentSnapshot>>> getUsersInRadiusAndAge(double radius,
      double minAge, double maxAge) async {
      Query q = _firestore.collection('users').where('age', isGreaterThanOrEqualTo: minAge, isLessThanOrEqualTo: maxAge);

      Position userLocation = await Geolocator().getCurrentPosition();

      GeoFirePoint center = geo.point(
          latitude: userLocation.latitude, longitude: userLocation.longitude);

      return geo.collection(collectionRef: q)
          .within(center: center, radius: radius, field: 'position');

  }
4

1 回答 1

1

这个查询是错误的:

  Query q = _firestore.collection('users').where('age', isGreaterThanOrEqualTo: minAge, isLessThanOrEqualTo: maxAge);

您应该执行以下操作:

Query q = _firestore.collection('users').where('age', isGreaterThanOrEqualTo: minAge).where('age', isLessThanOrEqualTo: maxAge);

这将返回 age >= minAge 和 age <= maxAge 的文档

于 2020-06-21T12:37:55.247 回答