subcollection studio query firestore data consultas collection firebase google-cloud-platform google-cloud-firestore data-modeling

studio - get data firebase firestore



Firestore: consulta por elemento en la matriz del documento (3)

Tengo un documento "usuario" que tiene una clave llamada "fotos". Aquí hay una serie de cadenas que se guardan, a saber, los ID de los documentos de "foto".

Quiero consultar "usuario" por este campo "fotos": quiero que todos los usuarios que tengan este ID en la propiedad "fotos".

¿Es esto posible a través de Firestore?


Se agregó el operador de consulta ''array-contiene'' para usar con .where () para buscar documentos donde un campo de matriz contiene un elemento específico.

https://firebase.google.com/support/release-notes/js 5.3.0

Actualización : también disponible en @google-cloud/firestore : https://github.com/googleapis/nodejs-firestore/releases/tag/v0.16.0

Actualización 2 https://firebase.googleblog.com/2018/08/better-arrays-in-cloud-firestore.html

La actualización 3 ahora está disponible en Admin Node.js SDK v6.0.0 https://github.com/firebase/firebase-admin-node/releases


Vea la respuesta de Henry , ya que no hemos puesto a disposición consultas de Array Contains.

Lamentablemente todavía no, aunque está en nuestra hoja de ruta.

Mientras tanto, deberá utilizar un mapa en su lugar, en forma de:

photos: { id1: true id2: true }

Ahora puede encontrar a todos los usuarios con id1 filtrando por photos.id1 == true .

Lea más sobre cómo consultar dichos conjuntos en la documentación de Firebase .


Aquí hay un poco de expansión en la respuesta, ya que algunos parecen estar confundidos acerca de tener que hacer índices para cada clave, Firestore ya indexa sus datos para consultas simples, por lo que puede hacer una consulta simple como

documentReference.where(''param'',''=='',''value'').onSnapshot(...)

pero no puede hacer una consulta compuesta a menos que indexe sus datos para esos parámetros. Por lo tanto, necesitaría índices para poder hacer algo como esto:

documentReference.where(''param'',''=='',''value'').where(..otherparams...).onSnapshot(...)

Entonces, siempre que necesite las fotos para una identificación, puede guardarlas como

usersCollection : (a collection) uidA: (a document) photoField: (a field value that is a map or object) fieldID1 : true (a property of the photoField) fieldID2 : true (a property of the photoField) etc ...

y simplemente puede consultar a los usuarios que tienen, digamos, fieldID1 en su photoField sin necesidad de formar ningún índice y realizar una consulta similar a continuación.

firestore.doc(''usersCollection/uidA'').where(''photoField.fieldID1'',''=='',true).onSnapshot(...)