Мое приложение предоставляет возможность запрашивать поле для гольфа на основе состояния / местоположения - из-за модели данных мне нужно получить данные из двух разных коллекций в 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");
}
});
}