gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 03:16:05 25 4
gpt4 key购买 nike

我有两个系列。 ( 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com