Flutter firebase选择where或和orderby

k4ymrczo  于 2023-04-22  发布在  Flutter
关注(0)|答案(1)|浏览(98)

新版本cloud_firestore:^4.5.1允许通过“or”和“and”进行过滤:

Future<List> getListModelos() async {
  List objetoList1 = [];
  Query<Map<String, dynamic>> collectionReferenceObjetoList1 =
      db.collection('/modelos').where(
            Filter.and(
              Filter("name", isEqualTo: "John"),
              Filter("id", isEqualTo: "01"),
            ),
          );
  QuerySnapshot queryObjetoList1 = await collectionReferenceObjetoList1.get();
  queryObjetoList1.docs.forEach((documento) {
    objetoList1.add(documento.data());
  });
  return objetoList1;
}

我在这里找到了这个有用的信息:How to add an OR condition to flutter Firebase queries
但是,当尝试“isEqualTo”+“isNotEqualTo”时,查询不会返回任何内容:

db.collection('/modelos').where(
            Filter.and(
              Filter("name", isEqualTo: "John"),
              Filter("id", isNotEqualTo: "null"),
            ),
          );

是否有任何方法或建议从Flutter查询到Firebase,允许“选择isEqual和isNotEqual”?

ukxgm1gy

ukxgm1gy1#

这里最可能出现的两个问题是,这个查询需要一个复合索引,而这些索引不是自动创建的。如果我在没有创建索引的情况下运行查询,它会记录以下错误:
cloud_firestore/failed-precondition]查询需要索引,可以在这里创建:https://console.firebase.google.com/v1/r/project/_/firestore/indexes?create_composite=Clxwcm9qZWN0cy9wcm9qZWN0LTgwODAwNTkzMjUyODIwOTgxODQvZGF0YWJhc2VzLyhkZWZhdWx0KS9jb2xsZWN0aW9uR3JvdXBzLzc2MDE1MDg5L2luZGV4ZXMvXxABGggKBG5hbWUQARoGCgJpZBABGgwKCF9fbmFtZV9fEAE
在那里的那个链接直接带你到Firestore控制台页面来创建必要的索引,所有的细节都已经填写好了。我所要做的就是点击按钮,等待索引被创建。一旦索引被创建,我的查询返回name"John"的文档,并且带有id字段,其文字字符串值不等于"null"

相关问题