如何筛选firebase cloud firestore上的id列表?

如何筛选firebase cloud firestore上的id列表?,firebase,flutter,dart,google-cloud-firestore,Firebase,Flutter,Dart,Google Cloud Firestore,我有两个收藏。(applyJobs和Jobs和users)。当用户申请作业时,我将该记录存储在applyJobs集合中。像这样: applyId:****, jobId:*****, userId:***** 现在,我想显示所有由用户申请的工作。 首先:获取日志用户id,我存储本地日志用户id。这样,我就可以获取日志用户id 第二:我根据该id筛选应用作业。如下所示,var ref=_db.collection('applyJobs')。其中('userId',isEqualTo:uid)。

我有两个收藏。(
applyJobs
Jobs
users
)。当用户申请作业时,我将该记录存储在
applyJobs
集合中。像这样:

applyId:****, 
jobId:*****,
userId:*****
现在,我想显示所有由用户申请的工作。 首先:获取日志用户id,我存储本地日志用户id。这样,我就可以获取日志用户id

第二:我根据该id筛选应用作业。如下所示,
var ref=_db.collection('applyJobs')。其中('userId',isEqualTo:uid)。我在这里没有调用
users
collection来获取uid。因为我已经在本地存储uid。这是最佳实践吗

第三:我将结果存储在这里
列表
。我想通过id列表获取所有作业。如何筛选它

我就是这样试的。但这不是ID列表。只有一个id

streamApplyJob(List<String> jobId) {
   Collection('jobs').document(jobId);
}
完整代码

数据库端

  ///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());
  }
///获取应用作业流
streamApplyJobs(字符串uid){
var ref=_db.collection('applyJobs')。其中('userId',isEqualTo:uid);
返回参考快照().map((列表)=>
list.documents.map((doc)=>ApplyJobModel.fromFirestore(doc)).toList();
}
///获取单个文档的流
streamApplyJob(列表作业ID){
var ref=_db.collection('jobs')。其中('jobId',isEqualTo:jobId);
返回参考快照().map((列表)=>
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)
    });
  }
列出作业ID=[];
void getData(){
db.streamApplyJobs(widget.uid).listen((listapplics)=>{
for(int i=0;i{
打印(v.长度)
});
}
解决方案(正在运行)-这是最佳做法还是有其他最佳方法

  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]),
                    }
                }
            }
        });
  }
Future getJobs()异步{
等待db.streamJobs(true)。侦听((jobs){
设置状态(){
工作模式=工作;
});
});
回归模型;
}
Future getData()异步{
等待getJobs();
db.streamApplyJobs(widget.uid).listen((apply)=>{
对于(int j=0;j
请看一看。它将CollectionReference绑定到列表

让我知道这是否有用。

请查看。它将CollectionReference绑定到列表

让我知道这是否有用

我想通过id列表获取所有作业。如何筛选它

目前无法将ID列表传递给Firestore查询并获取与所有这些ID匹配的文档。请参阅(其中介绍了如何使用文档ID执行此操作)和(其中介绍了如何在单个字段上筛选多个值)

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

我想通过id列表获取所有作业。如何筛选它

目前无法将ID列表传递给Firestore查询并获取与所有这些ID匹配的文档。请参阅(其中介绍了如何使用文档ID执行此操作)和(其中介绍了如何在单个字段上筛选多个值)


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

不确定它是否在任何地方正式记录,但现在这是可能的

.where(admin.firestore.FieldPath.documentId(), "in", [array, of, ids])

可在此处找到:

不确定它是否在任何地方正式记录,但现在这是可能的

.where(admin.firestore.FieldPath.documentId(), "in", [array, of, ids])

在这里找到:

我是这样做的:请告诉我,最佳实践可以吗。首先:我获取所有
作业
收集数据并存储局部变量。我得到了所有的
applyJob
收集数据和过滤器。我添加了我的解决方案,请检查,让我知道我是这样做的:请告诉我,最佳实践可以吗。首先:我获取所有
作业
收集数据并存储局部变量。我得到了所有的
applyJob
收集数据和过滤器我添加了我的解决方案,请检查并让我知道我添加了我的解决方案。它正在工作。请检查并让我知道我添加了我的解决方案。它正在工作。请检查并让我知道
.where(admin.firestore.FieldPath.documentId(), "in", [array, of, ids])