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