Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 对象中的Flatter Firestore查询字段_Firebase_Flutter_Google Cloud Firestore - Fatal编程技术网

Firebase 对象中的Flatter Firestore查询字段

Firebase 对象中的Flatter Firestore查询字段,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我正在编写一个flatter应用程序,并试图将文档添加到列表中,其中Firestore中的contractorUserId值字段(在jobBids下)等于登录的用户。下图显示了我的Firestore结构的结构(jobBids中的contractorUserId) 我正在使用以下代码: _jobsCollectionReference.snapshots().listen((jobBidsSnapshot) { if (jobBidsSnapshot.docs.isNotEmpty)

我正在编写一个flatter应用程序,并试图将文档添加到列表中,其中Firestore中的contractorUserId值字段(在jobBids下)等于登录的用户。下图显示了我的Firestore结构的结构(jobBids中的contractorUserId)

我正在使用以下代码:

_jobsCollectionReference.snapshots().listen((jobBidsSnapshot) {
      if (jobBidsSnapshot.docs.isNotEmpty) {
        var jobsWithBids = jobBidsSnapshot.docs
            .map((jobBidsSnapshot) =>
                JobWithBids.fromMap(jobBidsSnapshot.data(), jobBidsSnapshot.id))
            .where((mappedItem) => mappedItem.jobBids != null)
            .where((mappedItem) =>
                mappedItem.jobBids
                    .map((e) => e.contractorUserId == loggedInUser.uid)
                    .toList()
                    .length >
                0)
            .toList();
此代码生成一个包含contractorUserId字段所在的所有对象的列表。但是,目的只是添加contractorUserId等于登录用户的文档


有人知道我做错了什么吗?

之所以会出现错误,是因为下面的代码段计算结果为
true
,因为您只是检查列表的长度,即使
e.contractorUserId==loggedInUser.uid
等于false:

mappedItem.jobBids
.map((e)=>e.contractorUserId==loggedInUser.uid)
托利斯先生()
.长度>
0
所以你的代码实际上是:

var jobsWithBids=jobBidsSnapshot.docs
.map((jobBidsSnapshot)=>jobbithbids.fromMap(jobBidsSnapshot.data(),jobBidsSnapshot.id))
.where((mappedItem)=>mappedItem.jobBids!=null)
.where((mappedItem)=>true)//这是它的计算结果
.toList();
您应该在最后一次检查中将
map
切换到
where
,以便它过滤任何不满足条件的列表。见下文:

var jobsWithBids=jobBidsSnapshot.docs
.map((jobBidsSnapshot)=>jobbithbids.fromMap(jobBidsSnapshot.data(),jobBidsSnapshot.id))
.where((mappedItem)=>mappedItem.jobBids!=null)
.where((mappedItem)=>mappedItem.jobBids
.where((e)=>e.contractorUserId==loggedInUser.uid)
托利斯先生()
.长度>0
) 
.toList();

感谢您的精彩解释!!这解决了我几个小时以来一直关注的问题!