Я думал, что читал, что вы можете запрашивать вложенные коллекции с новым Firebase Firestore, но я не вижу никаких примеров. Например, у меня Firestore настроен следующим образом:
- Танцы [сборник]
- danceName
- Песни [сборник]
- название песни
Как я могу запросить «Найти все танцы, где songName == 'X'»
firebase
google-cloud-firestore
Nelson.b.austin
источник
источник
Ответы:
Обновление 2019-05-07
Сегодня мы выпустили запросы к группам сбора , которые позволяют выполнять запросы по вложенным коллекциям.
Так, например, в веб-SDK:
Это будет соответствовать документам в любой коллекции, где последняя часть пути коллекции - «Песни».
Ваш первоначальный вопрос касался поиска танцев, где songName == 'X', и это все еще невозможно напрямую, однако для каждой совпавшей песни вы можете загрузить ее родительскую.
Оригинальный ответ
Это функция, которой пока нет. Это называется «запрос группы сбора» и позволяет запрашивать все песни независимо от того, в каком танце они содержатся. Это то, что мы намерены поддерживать, но у нас нет конкретных сроков, когда это произойдет.
Альтернативная структура на этом этапе состоит в том, чтобы сделать песни сборником верхнего уровня и сделать, какой танец песня является частью свойства песни.
источник
ОБНОВЛЕНИЕ Теперь Firestore поддерживает массив-содержащий
Имея эти документы
сделай это так
@ Nelson.b.austin Поскольку у firestore этого еще нет, я предлагаю вам иметь плоскую структуру, что означает:
Имея это таким образом, вы можете сделать это:
Надеюсь, это поможет.
источник
songName_Title3: false
полезно? если я не ошибаюсь, он может быть использован только для поиска танцев , которые не имеют названия конкретных песен , предполагая , что нам нужно ,songName_Title3: false
чтобы сделатьdances.where("songName_"+songTitle, "==", false);
возвращение таких результатов это не имело бы Sence для каждого танца , чтобы иметь логические флаги для каждой возможной песни name ...Что, если вы храните песни как объект, а не как коллекцию? Каждый танец как, с песнями как полем: введите Object (не сборник)
тогда вы можете запросить все танцы с aNameOfASong:
источник
ОБНОВЛЕНИЕ 2019
Firestore выпустил запросы группы коллекций. См. Ответ Гила выше или официальную документацию запроса группы сбора
Предыдущий ответ
Как заявил Гил Гилберт, кажется, что запросы группы сбора в настоящее время находятся в разработке. Между тем, вероятно, лучше использовать коллекции корневого уровня и просто связывать эти коллекции с помощью UID документа.
Для тех, кто еще не знает, у Джеффа Делани есть несколько невероятных руководств и ресурсов для всех, кто работает с Firebase (и Angular) на AngularFirebase. .
Моделирование реляционных данных Firestore NoSQL - здесь он раскрывает основы структурирования БД NoSQL и Firestore.
Расширенное моделирование данных с помощью Firestore на примере - это более продвинутые методы, о которых стоит помнить. Отличное чтение для тех, кто хочет поднять свои навыки Firestore на новый уровень
источник
НОВОЕ ОБНОВЛЕНИЕ 8 июля 2019 г .:
источник
Вы всегда можете искать так: -
источник
источник
источник
Было бы лучше использовать плоскую структуру данных.
В документации указаны плюсы и минусы различных структур данных на этой странице. .
В частности об ограничениях структур с вложенными коллекциями:
В отличие от предполагаемых преимуществ плоской структуры данных:
источник
Я нашел решение. Пожалуйста, проверьте это.
Затем вы можете увидеть вкладки «Данные», «Правила», «Индексы», «Использование» в облачном хранилище на console.firebase.google.com. Наконец, вы должны установить индексы на вкладке индексов.
Введите здесь идентификатор коллекции и значение поля. Затем выберите опцию группы сбора. Наслаждайся этим. Спасибо
источник
Я работаю с Observables здесь и AngularFire оболочкой но вот как мне это удалось.
Это какое-то безумие, я все еще изучаю наблюдаемые и, возможно, перестарался. Но это было хорошее упражнение.
Некоторое объяснение (не эксперт RxJS):
in
запроса.Я скопировал, вставил свой код и изменил имена переменных на ваши, не уверен, есть ли какие-либо ошибки, но у меня это сработало. Дайте мне знать, если вы обнаружите какие-либо ошибки, или можете предложить лучший способ проверить это, возможно, с помощью какого-нибудь имитационного хранилища огня.
источник