Google Firestore: ¿Cómo obtener varios documentos con múltiples identificaciones en un solo viaje de ida y vuelta?

Resuelto Joon asked hace 54 años • 17 respuestas

Me pregunto si es posible obtener varios documentos mediante una lista de identificadores en un viaje de ida y vuelta (llamada de red) a la base de datos de Firestore.

Joon avatar Jan 01 '70 08:01 Joon
Aceptado

si estás dentro de Nodo:

https://github.com/googleapis/nodejs-firestore/blob/master/dev/src/index.ts#L978

/**
* Retrieves multiple documents from Firestore.
*
* @param {...DocumentReference} documents - The document references
* to receive.
* @returns {Promise<Array.<DocumentSnapshot>>} A Promise that
* contains an array with the resulting document snapshots.
*
* @example
* let documentRef1 = firestore.doc('col/doc1');
* let documentRef2 = firestore.doc('col/doc2');
*
* firestore.getAll(documentRef1, documentRef2).then(docs => {
*   console.log(`First document: ${JSON.stringify(docs[0])}`);
*   console.log(`Second document: ${JSON.stringify(docs[1])}`);
* });
*/

Esto es específicamente para el SDK del servidor.

ACTUALIZACIÓN: ¡ Cloud Firestore ahora admite consultas IN!

myCollection.where(firestore.FieldPath.documentId(), 'in', ["123","456","789"])
Nicholas Franceschina avatar Jan 24 '2018 13:01 Nicholas Franceschina

En la práctica usarías firestore.getAll así

async getUsers({userIds}) {
    const refs = userIds.map(id => this.firestore.doc(`users/${id}`))
    const users = await this.firestore.getAll(...refs)
    console.log(users.map(doc => doc.data()))
}

o con sintaxis de promesa

getUsers({userIds}) {
    const refs = userIds.map(id => this.firestore.doc(`users/${id}`))
    this.firestore.getAll(...refs).then(users => console.log(users.map(doc => doc.data())))
}
Sebastian avatar Nov 27 '2018 22:11 Sebastian

Acaban de anunciar esta funcionalidad, https://firebase.googleblog.com/2019/11/cloud-firestore-now-supports-in-queries.html .

Ahora puedes usar consultas como, pero ten en cuenta que el tamaño de entrada no puede ser mayor que 10.

userCollection.where('uid', 'in', ["1231","222","2131"])
jeadonara avatar Nov 09 '2019 14:11 jeadonara