Firebase 使用多个条件where子句的Flatter Cloud FireStore查询
我一直在努力寻找正确的方法来执行一个查询,该方法基于一些可能添加或不添加的条件执行多个条件查询。我试过几种方法,但都不管用Firebase 使用多个条件where子句的Flatter Cloud FireStore查询,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我一直在努力寻找正确的方法来执行一个查询,该方法基于一些可能添加或不添加的条件执行多个条件查询。我试过几种方法,但都不管用 Future<QuerySnapshot> searchStuff(StuffModel stuff) async { CollectionReference col = _firestore.collection(Constants.stuffCollection); Query query = col.where('uid', isEqu
Future<QuerySnapshot> searchStuff(StuffModel stuff) async {
CollectionReference col = _firestore.collection(Constants.stuffCollection);
Query query = col.where('uid', isEqualTo: stuff.uid);
if (stuff.who != null) {
query = query.where('who', isEqualTo: stuff.who);
}
if (stuff.what != null) {
query = query.where('what', isEqualTo: stuff.what);
}
if (stuff.where != null) {
query = query.where('where', isEqualTo: stuff.where);
}
if (stuff.when != null) {
query = query.where('when', isEqualTo: Timestamp.fromDate(stuff.when));
}
return await query.getDocuments();
}
Future searchStuff(StuffModel stuff)异步{
CollectionReference col=\u firestore.collection(Constants.stuffCollection);
Query Query=col.where('uid',isEqualTo:stuff.uid);
if(stuff.who!=null){
query=query.where('who',isEqualTo:stuff.who);
}
if(stuff.what!=null){
query=query.where('what',isEqualTo:stuff.what);
}
if(stuff.where!=null){
query=query.where('where',isEqualTo:stuff.where);
}
if(stuff.when!=null){
query=query.where('when',isEqualTo:Timestamp.fromDate(stuff.when));
}
return wait query.getDocuments();
}
添加附加求值后,对于非空值,在每个条件下,代码现在看起来如下所示,并且工作正常:
Future<QuerySnapshot> searchStuff(StuffModel stuff) async {
CollectionReference col = _firestore.collection(Constants.stuffCollection);
Query query = col.where('uid', isEqualTo: stuff.uid);
if (stuff.who != null && stuff.who.isNotEmpty) {
query = query.where('who', isEqualTo: stuff.who);
}
if (stuff.what != null && stuff.what.isNotEmpty) {
query = query.where('what', isEqualTo: stuff.what);
}
if (stuff.where != null && stuff.where.isNotEmpty) {
query = query.where('where', isEqualTo: stuff.where);
}
if (stuff.when != null) {
query = query.where('when', isEqualTo: Timestamp.fromDate(stuff.when));
}
return await query.getDocuments();
}
Future searchStuff(StuffModel stuff)异步{
CollectionReference col=\u firestore.collection(Constants.stuffCollection);
Query Query=col.where('uid',isEqualTo:stuff.uid);
if(stuff.who!=null&&stuff.who.isNotEmpty){
query=query.where('who',isEqualTo:stuff.who);
}
if(stuff.what!=null&&stuff.what.isNotEmpty){
query=query.where('what',isEqualTo:stuff.what);
}
if(stuff.where!=null&&stuff.where.isNotEmpty){
query=query.where('where',isEqualTo:stuff.where);
}
if(stuff.when!=null){
query=query.where('when',isEqualTo:Timestamp.fromDate(stuff.when));
}
return wait query.getDocuments();
}
添加附加求值后,对于非空值,在每个条件下,代码现在看起来如下所示,并且工作正常:
Future<QuerySnapshot> searchStuff(StuffModel stuff) async {
CollectionReference col = _firestore.collection(Constants.stuffCollection);
Query query = col.where('uid', isEqualTo: stuff.uid);
if (stuff.who != null && stuff.who.isNotEmpty) {
query = query.where('who', isEqualTo: stuff.who);
}
if (stuff.what != null && stuff.what.isNotEmpty) {
query = query.where('what', isEqualTo: stuff.what);
}
if (stuff.where != null && stuff.where.isNotEmpty) {
query = query.where('where', isEqualTo: stuff.where);
}
if (stuff.when != null) {
query = query.where('when', isEqualTo: Timestamp.fromDate(stuff.when));
}
return await query.getDocuments();
}
Future searchStuff(StuffModel stuff)异步{
CollectionReference col=\u firestore.collection(Constants.stuffCollection);
Query Query=col.where('uid',isEqualTo:stuff.uid);
if(stuff.who!=null&&stuff.who.isNotEmpty){
query=query.where('who',isEqualTo:stuff.who);
}
if(stuff.what!=null&&stuff.what.isNotEmpty){
query=query.where('what',isEqualTo:stuff.what);
}
if(stuff.where!=null&&stuff.where.isNotEmpty){
query=query.where('where',isEqualTo:stuff.where);
}
if(stuff.when!=null){
query=query.where('when',isEqualTo:Timestamp.fromDate(stuff.when));
}
return wait query.getDocuments();
}
乍一看,我觉得这很好。什么是无效的?它没有返回任何内容,我设置了一些断点,满足了条件,在数据库中我有满足这些条件的文档,但什么都没有。如果我这样做,它会工作return\u firestore.collection(Constants.stuffCollection)。where('uid',isEqualTo:stuff.uid)。where('uid',isEqualTo:stuff.uid)。where('what',isEqualTo:stuff.what).getDocuments();
我觉得代码很好。你确定工作版本和非工作版本的条件相同吗?@FrankvanPuffelen我已经解决了这个问题,我添加了一个非空值的附加条件,当我测试时,在第一次运行时它起作用,然后在第二次测试中更改参数,我注意到一个p参数带有空值,例如what==“”,所以我在每个条件上都添加了,例如stuff.what.isNotEmpty,并且该条件修复了问题。谢谢!!乍一看,这看起来很好。什么不起作用?它没有返回任何东西,我放置了一些断点,条件得到满足,在数据库中我有满足该条件的文档,但什么都没有。如果我做了什么在这样的情况下,它工作return\u firestore.collection(Constants.stuffCollection).where('uid',isEqualTo:stuff.uid).where('what',isEqualTo:stuff.what).getDocuments();
我觉得代码很好。你确定工作版本和非工作版本的条件相同吗?@FrankvanPuffelen我已经解决了这个问题,我添加了一个非空值的附加条件,当我测试时,在第一次运行时它起作用,然后在第二次测试中更改参数,我注意到一个pparameter带有空值,例如what==“”,因此我在每个条件上都添加了,例如stuff.what.isNotEmpty,并且该条件修复了问题。谢谢!!