如何从 Cloud firestore 过滤两次数据?

How do I filter data from cloud firestore twice?

我想检查用户的文档中是否有字符串“Level”和任意数字。

Level: int

如果是这样,以后应该return真,如果不是的话。 这是我正在尝试的代码:

class StufenService{
  String userID;
  StufenService(this.userID);

  final CollectionReference userTodos =
  FirebaseFirestore.instance.collection('userTodos');

  Future checkIfStufeExists() async {
    await userTodos.where('Stufe' is int).get();
    final data = QuerySnapshot.data.documents.where(userID);
    if (data.exists){
      return true;
    } else
      {return false;}
  }
}

首先,我过滤掉所有在其 firebased 文档中具有“Level”: int 的用户。然后我想查看当前用户是否在用户中

QuerySnapshot后的数据用红色下划线表示:

The getter 'data' isn't defined for the type 'QuerySnapshot'.

有人可以帮我实现我的计划吗? 也许整个事情必须以不同的方式完成?

您没有对 where 语句的返回值执行任何操作。 class QuerySnapshot 没有 .data static getter。为了从 firestore 访问返回值,您需要执行类似的操作:

...
final snapshot = await userTodos.where('Stufe' is int).get();
final data = snapshot.data;
...

对于这种情况,我发现将 FlutterFire documentation and Firestore reference 放在手边最为有用。基于这些,你的代码应该是这样的:

final CollectionReference userTodos =
FirebaseFirestore.instance.collection('userTodos');

Future checkIfStufeExists() async {
  var query = userTodos.where('Stufe', isEqualTo: 42); // First condition
  query = query.where("userId", isEqualTo: userID);    // Second condition
  final querySnapshot = await query.get();             // Read from the database
  return querySnapshot.size > 0;                       // Check if there are any results
}