¿Cómo usar la consulta de Firebase equalTo (value, key)?

Como novato en firebase intenté imitar una especie de "where clause" para recuperar la cartera del usuario en este sencillo caso de uso:

User 48bde8f8-3b66-40bc-b988-566ccc77335c email: "[email protected]" username: "userTest1" UserWallet F4PvtvNT2Z coins: 26 someList elemet1 elemet2 user: "48bde8f8-3b66-40bc-b988-566ccc77335c" 

Primero intenté codificar mi solicitud de la siguiente manera:

 Firebase root = new Firebase("https://myApp.firebaseio.com/"); Firebase ref = root.child("UserWallet"); Query query = ref.equalTo("48bde8f8-3b66-40bc-b988-566ccc77335c", "user"); 

El resultado fue nulo, así que escribí esta consulta:

 Query query = ref.orderByChild("user").equalTo("48bde8f8-3b66-40bc-b988-566ccc77335c", "user"); 

El resultado fue nulo de nuevo. La única manera de recuperar la cartera era con esta consulta:

 Query query = ref.orderByChild("user").equalTo("48bde8f8-3b66-40bc-b988-566ccc77335c"); 

Entonces, ¿Debo tener que usar siempre la consulta "orderByChild ()" antes de usar "equalTo ()"?
Y por lo tanto, ¿cuál es el propósito de la consulta "equalTo (String value, String key)" compara a "equalTo (String value) ya que sólo el segundo funciona correctamente?

Hay algunos casos de borde que no necesitan un orderBy...() , pero en general se necesita un orderBy...() antes de una operación de filtrado ( equalTo() , startAt() , endAt() ).

Le recomiendo que primero lea la guía de programación Firebase para Android (95% de ella se aplica a Java regular también). Unas horas pasadas en esa guía, ahorrarán docenas de preguntas aquí. Por ejemplo: esta es la sección sobre consultas .

Después de leer esto, también puede leer esta guía sobre NoSQL Data Modeling . Cubre muchos patrones comunes en el modelado de datos NoSQL y le ayudará a darse cuenta temprano de que tratar de asignar consultas SQL a una base de datos NoSQL es una idea lógica, pero rara vez es buena.

Mi inicial (sin ninguna idea en sus casos de uso, a excepción de "Necesito poder encontrar las carpetas para un usuario") modelo:

 UserWallet "48bde8f8-3b66-40bc-b988-566ccc77335c" "F4PvtvNT2Z" coins: 26 someList element1 element2 

En el modelo anterior, he invertido la Wallet y el User en UserWallet , de modo que buscar la cartera (s) para un usuario se vuelve más fácil.

 ref.child('UserWallet').child(auth.uid).addValueEventListener(... 

Tenga en cuenta que no hay ninguna consulta involucrada aquí, por lo que la carga será igualmente rápida, no importa cuántos usuarios tiene en su base de datos.

O alternativamente:

 User "48bde8f8-3b66-40bc-b988-566ccc77335c" email: "[email protected]" username: "userTest1" Wallet "F4PvtvNT2Z" coins: 26 someList element1 element2 UserWallet "48bde8f8-3b66-40bc-b988-566ccc77335c" "F4PvtvNT2Z" 

Ahora hemos terminado de aplanar la estructura. Para determinar las carteras de un usuario, vaya a UserWaller/$uid y luego cargue cada cartera de Wallets/$walletid . Puede ser un poco más código, pero será extremadamente eficiente (ya que no hay consultas involucradas).

Puede utilizar la consulta anidada para esto. Si usted tiene identificación aleatoria múltiple usted puede compararlos fácilmente.! Referencia de base de datos = FirebaseDatabase.getInstance (). GetReference ();

  Query query = reference.child("user"); query.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (dataSnapshot.exists()) { // dataSnapshot is the "issue" node with all children with id 0 for (DataSnapshot issue : dataSnapshot.getChildren()) { // do something with the individual "issues" Query query = reference.child("user").child(dataSnapshot.getKey().equals(YourData))); query.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (dataSnapshot.exists()) { } } } @Override public void onCancelled(DatabaseError databaseError) { } }); 
  • InflateException: Línea de archivo XML binario # 22: Error al inflar la clase <unknown>
  • Método estático sin nombre
  • Cómo configurar la posición aleatoria de TextView dentro de la disposición lineal?
  • ¿Hay alguna biblioteca o algoritmo para convertir Shamsi (Jalali) a fecha gregoriana en Java?
  • Android ScrollView no se inicia en la parte superior, pero al principio del GridView
  • Descargar imagen a través de la función Parse Cloud Code
  • ¿Por qué MediaPlayer.seekTo (t) no va al instante especificado exacto "t"?
  • Android reproducir repetidamente un archivo mp3 sin ningún espacio vacío
  • PointerIndex fuera de rango Multitouch para Android
  • Autocompletar en android - para la búsqueda de youtube
  • Cómo convertir un archivo a base 64 (como .pdf, .txt) en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.