Pensé haber leído que puedes consultar subcolecciones con el nuevo Firebase Firestore, pero no veo ningún ejemplo. Por ejemplo, tengo mi configuración de Firestore de la siguiente manera:
- Danzas [colección]
- danceName
- Canciones [colección]
- nombre de la cancion
¿Cómo podría consultar "Buscar todos los bailes donde songName == 'X'"
firebase
google-cloud-firestore
Nelson.b.austin
fuente
fuente
Respuestas:
Actualización 2019-05-07
Hoy lanzamos consultas de grupos de colecciones , y estas le permiten realizar consultas entre subcolecciones.
Entonces, por ejemplo, en el SDK web:
Esto coincidiría con los documentos de cualquier colección donde la última parte de la ruta de la colección sea 'Canciones'.
Su pregunta original era sobre cómo encontrar bailes donde songName == 'X', y esto todavía no es posible directamente, sin embargo, para cada canción que coincida, puede cargar su padre.
Respuesta original
Esta es una característica que aún no existe. Se llama "consulta de grupo de colección" y te permitiría consultar todas las canciones independientemente de qué baile las contenga. Esto es algo que tenemos la intención de apoyar, pero no tenemos un cronograma concreto sobre cuándo llegará.
La estructura alternativa en este punto es hacer de las canciones una colección de alto nivel y hacer que el baile sea parte de una propiedad de la canción.
fuente
ACTUALIZAR Ahora Firestore admite contenido de matrices
Tener estos documentos
hacerlo de esta forma
@ Nelson.b.austin Dado que Firestore aún no tiene eso, le sugiero que tenga una estructura plana, es decir:
Teniéndolo de esa manera, puede hacerlo:
Espero que esto ayude.
fuente
songName_Title3: false
sirve si no me equivoco, solo se puede usar para buscar bailes que no tienen un nombre de canción específico, asumiendo que necesitamos unsongName_Title3: false
paradances.where("songName_"+songTitle, "==", false);
devolver tales resultados, no tendría sentido que cada baile tenga banderas booleanas para cada canción posible nombre ...¿Qué pasa si almacena canciones como un objeto en lugar de como una colección? Cada baile como, con canciones como campo: escriba Objeto (no una colección)
entonces podrías consultar todos los bailes con aNameOfASong:
fuente
ACTUALIZACIÓN 2019
Firestore ha publicado consultas de grupos de recopilación. Consulte la respuesta de Gil anterior o la documentación oficial de consulta del grupo de recopilación
Respuesta anterior
Como dijo Gil Gilbert, parece que las consultas de grupos de colecciones están actualmente en proceso. Mientras tanto, probablemente sea mejor usar colecciones de nivel raíz y simplemente vincular estas colecciones usando los UID del documento.
Para aquellos que aún no lo saben, Jeff Delaney tiene algunas guías y recursos increíbles para cualquiera que trabaje con Firebase (y Angular) en AngularFirebase .
Modelado de datos relacionales de Firestore NoSQL : aquí analiza los conceptos básicos de la estructuración de NoSQL y Firestore DB
Modelado de datos avanzado con Firestore por ejemplo : estas son técnicas más avanzadas para tener en cuenta. Una gran lectura para aquellos que quieran llevar sus habilidades de Firestore al siguiente nivel.
fuente
NUEVA ACTUALIZACIÓN 8 de julio de 2019:
fuente
Siempre puedes buscar así: -
fuente
fuente
fuente
Podría ser mejor utilizar una estructura de datos plana.
Los documentos especifican los pros y los contras de las diferentes estructuras de datos en esta página .
Específicamente sobre las limitaciones de las estructuras con subcolecciones:
En contraste con las supuestas ventajas de una estructura de datos plana:
fuente
He encontrado una solución. Por favor, chequee esto.
Y luego puede ver las pestañas Datos, Reglas, Índices, Uso en su almacén de incendios en la nube desde console.firebase.google.com. Finalmente, debe configurar índices en la pestaña de índices.
Complete aquí el ID de la colección y algún valor de campo. Luego seleccione la opción de grupo de colección. Disfrútala. Gracias
fuente
Estoy trabajando con Observables aquí y el contenedor AngularFire, pero así es como logré hacerlo.
Es un poco loco, todavía estoy aprendiendo sobre los observables y posiblemente exagere. Pero fue un buen ejercicio.
Alguna explicación (no un experto en RxJS):
in
consulta.Copié, pegué mi código y cambié los nombres de las variables a los suyos, no estoy seguro de si hay algún error, pero funcionó bien para mí. Avíseme si encuentra algún error o si puede sugerir una mejor manera de probarlo, tal vez con algún firestore simulado.
fuente