【问题标题】:How to fetch data from firestore using .where(GreaterThan, and LessThan) condition. - Flutter如何使用 .where(大于和小于)条件从 firestore 获取数据。 - 颤振
【发布时间】:2020-11-06 10:53:17
【问题描述】:

我正在尝试使用 .where() 条件从 Firestore 获取数据。

 Query adsRef = FirebaseFirestore.instance
    .collection('All ads')        
    .where('adPrice',
        isGreaterThanOrEqualTo: '2000') 
    .where('adPrice',
        isLessThanOrEqualTo: '115000') 
    .limit(adsPerPage);
QuerySnapshot querySnapshot = await adsRef.get();

仅使用一个条件(例如: .where('adPrice',isGreaterThanOrEqualTo: '2000'))时有效,但不能获取所有文档[只是获取随机文档]。
当同时使用这两种条件时,即使数据库有匹配的数据,它也会返回 null。

还有其他方法可以从 Firestore 中获取两个数字内的数据吗? (在 2000 到 115000 之间)

【问题讨论】:

  • 您应该在查询中添加一些错误处理并查看消息内容。
  • 为什么要和字符串比较?
  • @EmilGi 是的,这是问题所在。当它是 String 时,它只会获取随机文档,一旦我将其更改为 int ,它就会按预期工作。 :)

标签: firebase flutter dart google-cloud-firestore


【解决方案1】:

两个不等式条件在一个 Firestore 查询中无效。将你的代码块包装在 try catch 中,你会看到错误。

或者,您可以分别查询两个条件,然后像这样合并结果:

void getAds() async {
    List<Future<QuerySnapshot>> futures = [];
    var firstQuery = FirebaseFirestore.instance
.collection('All ads')
        .where('adPrice', isGreaterThanOrEqualTo: '2000')
        .getDocuments();
var secondQuery = FirebaseFirestore.instance
.collection('All ads')
        .where('adPrice', isLessThanOrEqualTo: '115000')
        .getDocuments();

    futures.add(firstQuery);
    futures.add(secondQuery);

    List<QuerySnapshot> results = await Future.wait(futures);
    results.forEach((res) {
      res.documents.forEach((docResults) {
        print(docResults.data);
      });
    });
  }

请试试这个,让我知道它是否适合你。谢谢

【讨论】:

  • 您所说的并不完全正确 - 您可以在 同一字段 上设置多个范围过滤器。您不能在同一查询中的 不同字段 上有多个范围过滤器。请务必阅读文档以了解限制是什么。 firebase.google.com/docs/firestore/query-data/…
猜你喜欢
  • 1970-01-01
  • 2021-12-22
  • 2021-03-04
  • 2021-10-01
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多