如何筛选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])