Группа коллекций Flutter Firestore

# #flutter #google-cloud-firestore #flutter-web

Вопрос:

У меня есть collection компания, и у каждой компании есть коллекция employee . Я хочу создать запрос для получения конкретного сотрудника на основе его идентификатора документа. У тебя есть какие-нибудь идеи, как это сделать? Я думал об использовании collectionGroup(«сотрудник»), но не смог найти способ доступа к идентификатору документа.

 Stream<UserModel> streamFirestoreUser() {
 return _db
        .collectionGroup('employee')
        .where("email", isEqualTo: emailController.text)
        .limit(1)
        .snapshots()
        .map((event) => UserModel.fromJson(event.docs.first.data()));
  }
 

Ответ №1:

Попробуйте что-нибудь вроде этого:

 FirebaseFirestore _firestore = FirebaseFirestore.instance;
final _controller = StreamController<QuerySnapshot>.broadcast();

_listener() {
    final stream = _firestore 
        .collection("company")
        .doc(_idCompany)
        .collection("employee")
        .snapshots(); //retrieve all clients

stream.listen((data) {
    _controller.add(data);
    });
}

@override
void initState() {
   super.initState();
   _listener();
}
@override
void dispose() {
    
  _controller.close();
}

...


body: StreamBuilder<QuerySnapshot>(
        stream: _controller.stream,
        builder: (context, snapshot) {
            switch (snapshot.connectionState) {
                    case ConnectionState.none:
                    case ConnectionState.waiting:
                        return //Message: loading;
                    case ConnectionState.active:
                    case ConnectionState.done:
                        if (snapshot.hasError) {
                            return //Message: error;
                        } else {
                            QuerySnapshot? querySnapshot = snapshot.data;
                            if (querySnapshot!.docs.length == 0) {
                                return //Message: no clients ;
                            } else {
                                return ListView.builder(
                                        itemCount: querySnapshot.docs.length,
                                        itemBuilder: (context, indice) {
                                        List<DocumentSnapshot> clients = querySnapshot.docs.toList();
                                        DocumentSnapshot item = clients[indice];

                                        return //Clients;
                         
                                        },
                                );
                            }
                        }
            }
        },
  ),
 

Я надеюсь вам помочь.

Комментарии:

1. Спасибо за ответ. Дело в том, что я не знаю «_idCompany», и я ищу способ использовать collectionGroup («сотрудник») и найти конкретного сотрудника на основе его идентификатора. Знаете ли вы способ добиться этого?