Tengo este tipo de estructura en la base de datos de Firebase para mis artículos de publicación.

"posts" : {
"-LP-UfzuUHFJOkY0Ogb9" : {
  "dislikeCount" : "0",
  "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/privato-dfb2c.appspot.com/o/images%2F2309fdab-0d78-44e5-af1f-8d256efdf6fd.jpg?alt=media&token=1276804f-d48c-4e06-8982-309fd539a397",
  "likeCount" : "0",
  "postByUser" : {
    "aboutMe" : "death is inevitable",
    "countryCode" : "+91",
    "imageUrl" : "https://i.imgur.com/hAazykl.jpg",
    "mobileNumber" : "number",
    "name" : "Sid",
    "userName" : "deathcode"
  },
  "timeStamp" : 1539754082148,
  "title" : "This is cool, lowest price ever on grocers.",
  "type" : 3
}
}

Ahora necesito recuperar todas las publicaciones realizadas por cierto usuario en función del valor de userName bajo el objeto json "postByUser". Seguí ciertas guías para resolver esto, pero todas funcionaron en un valor de clave json que estaba debajo del elemento de publicación raíz, en lugar de debajo de otro objeto json debajo del elemento de publicación usando

 Query query = dbRef.child("posts").orderByChild("title").equalTo("sometitle");

Pero ¿cómo lo uso para el objeto json anidado?

0
Sidhant Rajora 17 oct. 2018 a las 09:00

2 respuestas

La mejor respuesta

Puede obtener todos los valores secundarios del hermano después de usar la consulta orderByChild() y su dataSnapshot.

El código para esto se parece a esto:

//ref is the correct database reference to your firebase database

ref.orderByChild("userName").equalTo(userNameYouWant).addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                        for (DataSnapshot ds: dataSnapshot.getChildren()) {
            String aboutMe = ds.child("aboutMe").getValue(String.class);
        }

                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });

Puede recuperar otros valores de nodos hermanos de la misma manera.

0
PradyumanDixit 17 oct. 2018 a las 09:23

Puede pasar una ruta a orderByChild, entonces:

Query query = dbRef.child("posts").orderByChild("postByUser/name").equalTo("deathcode");
1
Frank van Puffelen 17 oct. 2018 a las 16:42