Firestore - Создать новую SubCollection из существующей коллекции - PullRequest
0 голосов
/ 05 января 2020

Мое приложение предоставляет возможность запрашивать поле для гольфа на основе состояния / местоположения - из-за модели данных мне нужно получить данные из двух разных коллекций в Firestore. В настоящее время коллекции («гольф-клуб» содержит информацию о местоположении и «курсы», название которых мне нужно найти).

Две коллекции имеют общее поле («Идентификатор заведения») и имеют отношения «многие к одному» (курсы -> гольф-клуб). Так как в каждом гольф-клубе может быть 1 или более полей, связанных с ним.

Как бы я go о создании подколлекции (clubcourses), которая прикрепляет каждый документ из существующей коллекции полей к соответствующему документу в коллекции гольф-клуба на основе соответствующего идентификатора объекта?

Моим конечным результатом будет включение запроса, аналогичного запросу ориентиров, для каждого города, указанного в документах запроса группы сбора. https://firebase.google.com/docs/firestore/query-data/queries#collection -group-query

Существующий запрос в Dart без запроса группы сбора;

void getFSCourseList() {
    List<String> facility = [];
    var clubQuery = golfClubDatabase
        .collection("golfclub")
        .where("State", isEqualTo: "$_selectedState");

    clubQuery.getDocuments().then((clubSnap) {
      if (clubSnap.documents.length > 0) {
        print('club docs length = ${clubSnap.documents.length}'); // sanity check

        clubSnap.documents.forEach((document) {
          facility.add(document.data[
              "Facility ID"]); //add the facilities to a temp list for use in next query
        });
        var courseQuery = golfCourseDatabase
            .collection("course")
            .where("Facility ID", arrayContainsAny: facility); // doesn't return a value for some reason...

        courseQuery.getDocuments().then((courseSnap) {
          print('length of course snap = ${courseSnap.documents.length}'); // sanity check should be longer than clubSnap.length
          if (courseSnap.documents.length > 0) {
            print('length of course snap = ${courseSnap.documents.length}');
          }
        });
        facility.forEach((fac) => print(fac)); // sanity check should equal club-snap.length
        //print(facility.length);
      } else {
        print("Not Found");
      }
    });
  }

1 Ответ

0 голосов
/ 06 января 2020

У вас есть 2 варианта:

1) использовать поле ссылки в Firestore Documents, чтобы указать на документ в другой коллекции.

2) Получить ссылку на документ в первой коллекции, используя затем запрос в вашем коде манипулирует строкой, поэтому вместо указания на do c в первой коллекции он создаст новый do c в новой коллекции, но следуя той же структуре. Из этого же запроса вы можете получить все данные из do c, поэтому нет необходимости во втором запросе.

Этот пример здесь , если документация Firestore может помочь (даже если цель отличается)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...