如何在firestore中获取文档,其文档ID存储在列表中?,即只带那些文档....?

Posted

技术标签:

【中文标题】如何在firestore中获取文档,其文档ID存储在列表中?,即只带那些文档....?【英文标题】:How to get documents in firestore, whose document IDs are stored in the list?, i.e bring only those documents....? 【发布时间】:2020-08-18 10:41:36 【问题描述】:

我有一个包含特定集合“用户”的文档 ID 的列表,我想获取仅存在于该列表中的文档,并且这些文档位于“用户”集合中,如前所述。

代码:

  getUsers() async
     
       double radius = 0.3;
      String field = "GeoPosition";
       print(currentUser.point.longitude);
       GeoFirePoint center = geo.point(latitude: currentUser.point.latitude,  longitude: currentUser.point.longitude);
        var collectionRef = Firestore.instance.collection('user_locations').document(currentUser.pincode)  .collection('Users_complete_address_and_geopoint');
        this.stream =  geo.collection(collectionRef: collectionRef).within(center: center, radius: radius, field: field, strictMode: false);   
        Future<List<certainrangeusers>> users1 =  stream.first.then(
        (documents) => documents.map((doc) => certainrangeusers(
         id: doc['userPhone'],
         )
        ).toList());  
         users1.then((val) async
        QuerySnapshot snapshot = await  Firestore.instance.collection('users').where('id', isEqualTo: val.first.id).getDocuments();
         List<User> users = snapshot.documents.map((doc) =>  User.fromDocument(doc)).toList();
        setState(() 
         this.users = users;
          );
       );
   

Firebase 结构: Click here for the firebase structure

图片格式的代码:

Click here for the image

    在橙色框中,“users1”是一个包含文档 ID 的列表...用户 10 公里用户 在粉红色框中,我们使用列表的值... 在绿色框中,我们需要传递上述列表中存在的文档 id...

Ps:我使用“val.first.id”只是为了将文档首先出现在列表中........但是我需要带上该列表中的每个文档......所以这就是我的观点……

【问题讨论】:

你能得到第一个id的文档吗? @Adnankarim 我能够获得第一个 ID 的文档,我刚刚上传了 firebase 结构 查看我的回答,希望对您有所帮助。 【参考方案1】:

您可以为此目的使用交易。 Firestore transactions

【讨论】:

事务是用于读取然后写入文档,而不仅仅是读取。 因为我是 Flutter 的新手【参考方案2】:

这里如何从列表id中搜索所有文档

代替:

await  Firestore.instance.collection('users').where('id', isEqualTo: 
 val.first.id).getDocuments();

使用这个:

await  Firestore.instance.collection('users').where('id', whereIn: 
 val).getDocuments();

由于您有certainchangeuser 的列表,因此请执行此操作以获取 ID。

users1.then((val)
  // Get the ids
  List ids = [];
  for (var value in val)
    ids.add(value.id);
  
  //Then
  QuerySnapshot = await 
    Firestore.instance.collection('users').where('id', 
    whereIn:ids).getDocuments();
....
);

【讨论】:

错误:“未处理的异常:无效的参数:'certainrangeusers'的实例”,得到这个错误 确保“val”是一个列表 好吧,这只需要“id”而不是“某些范围用户”的列表 class certainrangeusers final String id;某些范围用户(this.id); 是列表的类 = [];

以上是关于如何在firestore中获取文档,其文档ID存储在列表中?,即只带那些文档....?的主要内容,如果未能解决你的问题,请参考以下文章

Firestore - 如何在将文档添加到集合后获取文档 ID

使用 FirestoreRecyclerAdapter 时如何获取 Firestore 文档 ID?

如何从 Cloud Firestore 中获取数据,其中 user.uid 等于 Flutter 中的文档 ID?

从 id 数组中获取 firestore 文档列表

在 Dart 的 Cloud Firestore 中添加文档后如何获取文档 ID

如何在快速点击 Firestore 中的 uitablecellviewcell 时获取文档 ID