¿Para qué sirve el tipo de datos de referencia de Firerestre?

Solo estoy explorando el nuevo Firebase Firestre y contiene un tipo de datos llamado reference . No está claro para mí qué hace esto.

  • ¿Es como una clave foránea?
  • ¿Se puede usar para señalar una colección que se encuentra en otro lugar?
  • Si la reference es una referencia real, ¿puedo usarla para consultas? Por ejemplo, ¿puedo tener una referencia que apunte directamente al usuario, en lugar de almacenar el ID de usuario en un campo de texto? ¿Y puedo usar esta referencia de usuario para consultar?

Las referencias son muy similares a las claves foráneas.

Los SDK lanzados actualmente no pueden almacenar referencias a otros proyectos. Dentro de un proyecto, las referencias pueden señalar a cualquier otro documento en cualquier otra colección.

Puede usar referencias en consultas como cualquier otro valor: para filtrar, ordenar y paginar (startAt / startAfter).

A diferencia de las claves externas en una base de datos SQL, las referencias no son útiles para realizar uniones en una sola consulta. Puede usarlos para búsquedas dependientes (que parecen unirse), pero tenga cuidado porque cada salto dará como resultado otro viaje de ida y vuelta al servidor.

Agregando a continuación lo que funcionó para mí usando referencias en Firestre.

Como dicen las otras respuestas, es como una clave externa. Sin embargo, el atributo de referencia no devuelve los datos del documento de referencia. Por ejemplo, tengo una lista de productos, con una referencia userRef como uno de los atributos en el producto. Obtener la lista de productos, me da la referencia del usuario que creó ese producto. Pero no me da los detalles del usuario en esa referencia. He usado otro back-end como servicios con punteros que tienen una marca “populate: true” que devuelve los datos al usuario en lugar de solo la identificación de referencia del usuario, lo que sería genial tener aquí (con suerte una mejora futura). )

A continuación se muestra un código de ejemplo que utilicé para establecer la referencia, así como obtener la colección de productos y luego obtener los detalles del usuario de la identificación de referencia del usuario.

Establecer una referencia en una colección:

 let data = { name: 'productName', size: 'medium' } data.userRef = db.doc('users/' + firebase.auth().currentUser.uid); db.collection('products').add(data); 

Obtenga una colección (productos) y todas las referencias en cada documento (detalles del usuario):

 db.collection('products').get() .then(res => { vm.mainListItems = []; res.forEach(doc => { let newItem = doc.data(); newItem.id = doc.id; if (newItem.userRef) { newItem.userRef.get() .then(res => { newItem.userData = res.data() }) .catch(err => console.error(err)); } vm.mainListItems.push(newItem); }); }) .catch(err => { console.error(err) }); 

Espero que esto ayude