Order by子句不能包含相等过滤器email字段



我想读取一个文本字段的文本(使用控制器emailController),并找出,如果电子邮件存在于我的集合"admins"

如果电子邮件存在于我的集合中,那么它应该返回true。否则将返回false。

首先我创建了firebase请求,然后我得到了查询的结果。如果查询不为空,那么它应该返回true。否则它应该返回false。(当它为null时,则集合中没有等于emailController的电子邮件)

当我运行代码时,我得到一个错误:

Error: [cloud_firestore/invalid-argument] Order by clause cannot contain a field with an equality filter email

at Object.createErrorWithStack (http://localhost:60283/dart_sdk.js:5660:12)
at Error._throw (http://localhost:60283/dart_sdk.js:21577:18)
at Error.throwWithStackTrace (http://localhost:60283/dart_sdk.js:21571:18)
at async._AsyncCallbackEntry.new.callback (http://localhost:60283/dart_sdk.js:43533:18)
at Object._microtaskLoop (http://localhost:60283/dart_sdk.js:43360:13)
at _startMicrotaskLoop (http://localhost:60283/dart_sdk.js:43366:13)
at http://localhost:60283/dart_sdk.js:38600:9

代码:

Future <bool> getAdminExistance()async{
var i =
await FirebaseFirestore.instance.
collection('admins').
orderBy('email').
where('email', isEqualTo: emailController.text.trim());
QuerySnapshot querySnapshot = await i.get();
if(querySnapshot == null){
return false;
}
else{
return true;
}
}

已经尝试了这个没有顺序,这个也是:

Future <bool> getAdminExistance()async{
var i =
await FirebaseFirestore.instance.
collection('admins')
.where('email', isEqualTo: email.text.trim())
.get()
.then((value) => value.size > 0 ? true : false);
}

但这也行不通。

您不能按等式(=)或子句中包含的任何字段对查询进行排序。

详情请参见限制。

最新更新