Как получить документы в пожарном депо, чьи идентификаторы документов хранятся в списке ?, т.е. принести только те документы ....? - PullRequest
2 голосов
/ 04 мая 2020

У меня есть список, который содержит идентификаторы документов определенной коллекции «пользователи», и я хочу, чтобы документы присутствовали только в этом списке, и эти документы находятся в коллекции «пользователи», как упоминалось ранее.

Код:

  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: Нажмите здесь, чтобы узнать структуру базы Firebase

Код В формате изображения:

Нажмите здесь для изображение

  1. В оранжевом поле «users1» - это список с идентификаторами документов ... пользователей 10 км пользователей
  2. В розовом поле мы использовали значение списка ...
  3. В зеленом поле нам нужно передать идентификаторы документов, представленные в приведенном выше списке ...

Ps: я использую "val.first .id "просто для того, чтобы сначала представить документ, присутствующий в списке ........ Но мне нужно, чтобы каждый документ, присутствующий в этом списке, был отмечен ...

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Здесь, как искать все документы из списка id

вместо:

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

используйте это:

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

Так как у вас есть список certainchangeuser, сделайте это, чтобы получить идентификаторы.

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();
....
});
0 голосов
/ 04 мая 2020

Вы можете использовать транзакцию для этой цели. Транзитные операции

...