Firebase 对象中的Flatter Firestore查询字段
我正在编写一个flatter应用程序,并试图将文档添加到列表中,其中Firestore中的contractorUserId值字段(在jobBids下)等于登录的用户。下图显示了我的Firestore结构的结构(jobBids中的contractorUserId) 我正在使用以下代码: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)
_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();
感谢您的精彩解释!!这解决了我几个小时以来一直关注的问题!