【问题标题】:Flutter, firestore order by two fieldsFlutter,firestore order by 两个字段
【发布时间】:2020-10-11 07:56:24
【问题描述】:

我正在尝试在我的应用程序中制作两个滑块,当它们从 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');

  }

【问题讨论】:

    标签: firebase flutter google-cloud-firestore geofirestore


    【解决方案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);
    

    这将返回年龄 >= minAge 和年龄

    【讨论】:

    • 你确定错误在这一行吗?你有一个名为“position.geohash”的字段吗?
    • 是的,我有,'position.geohash' 和按距离搜索可以正常工作,但是当我尝试进行查询以按距离和年龄搜索时,它不起作用
    • 还有其他解决方案吗?
    猜你喜欢
    • 2014-01-26
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    相关资源
    最近更新 更多