firebase - 如何过滤firebase cloud firestore上的id列表?

标签 firebase flutter dart google-cloud-firestore

我有两个系列。 ( applyJobsJobsusers )。当用户申请工作时,我将该记录存储在 applyJobs 中收藏。像这样:

applyId:****, 
jobId:*****,
userId:*****

现在,我想显示用户申请的所有工作。
第一:获取登录的用户ID,我存储本地登录的用户ID。因此,我可以获得记录的用户 ID。

第二:我按该 ID 过滤 Apply Jobs。像这样,var ref = _db.collection('applyJobs').where('userId',isEqualTo: uid); .我在这里我没有打电话users收集获取uid。因为我已经在本地存储了 uid。这是最佳实践吗?

第三:我在这里存储结果List<ApplyJobsModelClass> .我想通过 id 列表获取所有工作。我该如何过滤它?

这是我尝试过的方式。但这不是 ID 列表。只有一个身份证。
streamApplyJob(List<String> jobId) {
   Collection('jobs').document(jobId);
}

我也尝试过这种方式。
  Stream<List<JobModel>> streamApplyJob(List<String> jobId) {
     var ref = _db.collection('jobs').where('jobId',isEqualTo: jobId);
    return ref.snapshots().map((list) =>
        list.documents.map((doc) => JobModel.fromFirestore(doc)).toList());
  }

试图获取长度,但结果是 0
db.streamApplyJob(jobIds).listen((v)=>{
  print(v.length)
});

完整代码

数据库端
  ///Get a stream of apply jobs
  Stream<List<ApplyJobModel>> streamApplyJobs(String uid) {
    var ref = _db.collection('applyJobs').where('userId',isEqualTo: uid);

    return ref.snapshots().map((list) =>
        list.documents.map((doc) => ApplyJobModel.fromFirestore(doc)).toList());
  }

  ///Get a stream of a single document
  Stream<List<JobModel>> streamApplyJob(List<String> jobId) {
     var ref = _db.collection('jobs').where('jobId',isEqualTo: jobId);
    return ref.snapshots().map((list) =>
        list.documents.map((doc) => JobModel.fromFirestore(doc)).toList());
  }

打电话
  List<String> jobIds = [];

  void getData() {
    db.streamApplyJobs(widget.uid).listen((listApplies) => {
          for (int i = 0; i < listApplies.length; i++)
            {jobIds.add(listApplies[i].jobId)},
        });
    db.streamApplyJob(jobIds).listen((v)=>{
      print(v.length)
    });
  }

解决方案(它现在正在工作) - 这是最佳实践还是有其他最佳方法来做到这一点?
  Future<List<JobModel>> getJobs() async {
    await db.streamJobs(true).listen((jobs) {
      setState(() {
        jobModel = jobs;
      });
    });
    return jobModel;
  }

  Future getData() async {
    await getJobs();
    db.streamApplyJobs(widget.uid).listen((apply) => {
          for (int j = 0; j < jobModel.length; j++)
            {
              for (int i = 0; i < apply.length; i++)
                {
                  if (apply[i].jobId == jobModel[j].jobId)
                    {
                      jobModelNew.add(jobModel[j]),
                    }
                }
            }
        });
  }

最佳答案

I want to get all jobs by a list of id. How do I filter it?



目前无法将 ID 列表传递给 Firestore 查询并获取与所有这些 ID 匹配的文档。见 Google Firestore - how to get document by multiple ids in one round trip? (其中谈到使用文档 ID 进行此操作)和 Firebase Firestore - OR query (它谈到在单个字段上过滤多个值)。

除非您的用例恰好与第二个答案中提到的解决方法相匹配,否则您必须对每个值执行单独的查询,并将结果合并到您的应用程序代码中。

关于firebase - 如何过滤firebase cloud firestore上的id列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58405909/

相关文章:

flutter - 如何在具有泛型类型的类中启用协变?

dart - Flutter:如何在英雄动画期间更改子元素的大小?

firebase - 即使 Firestore 中发生错误,如何使监听器保持附加状态?

firebase - flutter firebase phone auth error 已通过安全网 token ,但在 firebase 控制台中未注册匹配的 sha-256

android - 如何管理 firebase 数据库 key ?

flutter - 如何在 Flutter 中创建类型别名?

flutter - 在此主页小部件上方找不到正确的 Provider<FirebaseUser>

flutter - 如何获取格式化的时区偏移量?

firebase - 在 beta 0.3.2 : incompatible block pointer 上使用 Firebase-auth 插件的 Flutter 的 Xcode 构建错误

flutter - 如何在 Dart 中正确声明类的 List 类型属性?