Freitag, April 10, 2020

Wie bekommen nur untergeordnete Schlüssel in Feuerstellung

Wie bekommen nur untergeordnete Schlüssel in Feuerstellung

Ich möchte zeigen nur Kinder, die der Lage ich.e Sindh und Punjab (nicht Ihre Kinder). Ist es möglich, und wenn ja, wie kann ich es tun?

  • mit der Abfrage für das
InformationsquelleAutor shahzain ali | 2017-06-15

8 Kommentare

  1. 11

    Vom Best practices für Daten-Struktur in den docs:

    Vermeiden verschachteln von Daten

    Weil die FB Echtzeit-Datenbank erlaubt die Verschachtelung von Daten bis zu 32
    Ebenen tief ist, könnten Sie versucht sein zu denken, dass dies die
    Standard-Struktur. Allerdings, wenn Sie Holen die Daten an einem Speicherort in Ihrem
    Datenbank, die Sie abrufen, alle seine Kind-Knoten. Darüber hinaus, wenn
    gewähren Sie jemand Lesen oder schreiben der Zugriff auf einen Knoten in Ihrer Datenbank, die Sie
    auch gewähren Sie Zugriff auf alle Daten, die unter diesem Knoten. Daher
    die Praxis, es ist am besten halten Sie Ihre Daten-Struktur so flach wie möglich.

    Ist, wie FB funktioniert es: Wenn Sie ein item bekommen, Sie bekommen Ihre Kinder als gut. Wenn Sie dies nicht möchten, sollten Sie die Umstrukturierung der Datenbank.

  2. 7

    Vermeiden Verschachteln Von Daten

    Weil die FB Echtzeit-Datenbank erlaubt die Verschachtelung von Daten bis zu 32 Ebenen tief ist, könnten Sie versucht sein zu denken, dass dies die Standard-Struktur. Allerdings, wenn Sie Daten abrufen, der an einem Ort in Ihrer Datenbank, die Sie abrufen, alle seine Kind-Knoten. Darüber hinaus, wenn Sie gewähren, jemand lese-oder Schreibzugriff auf einen Knoten in Ihrer Datenbank, die Sie auch gewähren Sie Zugriff auf alle Daten, die unter diesem Knoten. Daher wird in der Praxis, es ist am besten halten Sie Ihre Daten-Struktur so flach wie möglich.

    Unten ist eine Struktur, die von Euch auf, wie die Umsetzung Flachbild-Datenbank sowie so rufen Sie die Position-Taste.

    {
      "location": {
        "punjab": {
          "lahore": true,
          "multan": true
        },
        "sindh": {
          "karachi": true
        }
      },
    
      "place": {
        "lahore": {
          "location": "punjab",
          "details": {
            "0": "model",
            "1": "steel town"
          }
        },
        "multan": {
          "location": "punjab",
          "contacts": {
            "0": "myarea"
          }
        },
        "karachi": {
          "location": "sindh",
          "contacts": {
            "0": "hadeed",
            "1": "Steel town"
          }
        }
      }
    }

    Unten ist der code, den Sie verwenden können, um den Speicherort abzurufen Schlüssel.

    private DatabaseReference mDatabase;
    //...
    mDatabase = FirebaseDatabase.getInstance().getReference();
    mLocation = mDatabase.child("location");
    mPlace = mDatabase.child("place");
    
    ValueEventListener placeListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            //Get Post object and use the values to update the UI
            Place place = dataSnapshot.getValue(Place.class);
            String location = place.location;
            System.out.println(location);
        }
    };
    mPlace.addValueEventListener(placeListener);

    Für mehr Informationen auf FB:

  3. 1

    Ja, Sie können

    ValueEventListener getValueListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        //Get data from firebase
        Log.d("The name of child that you need:", dataSnapshot.getKey());
        //...
    }
    
    };
    
    databaseReference.addValueEventListener(getValueListener );

    Lesen Sie mehr: https://firebase.google.com/docs/database/android/read-and-write#listen_for_value_events

    • Bitte beachten Sie, dass: dataSnapshot.getKey() wird return-name des Kindes – ich denke, das ist, was Sie brauchen.
  4. 1
    DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("location");
    
    final ArrayList<String> statesArrayList= new ArrayList<>();
    
    databaseReference.addChildEventListener(new ChildEventListener() {
    
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            statesArrayList.add(dataSnapshot.getKey());
        }
    
        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
    
        }
    
        @Override
        void onChildRemoved(DataSnapshot dataSnapshot) {
    
        }
    
        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {
    
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {
    
        }
    });
  5. 0

    Obwohl verschachteln von Daten wird nicht empfohlen, in NoSQL-Datenbanken wie FB, um den Namen der Kind-Knoten, Ihr code wird wie folgt Aussehen

    DatabaseReference mainRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference locationref = mainRef.child("location");
    final ArrayList<String> locationNames = new ArrayList<>();
    locationref.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            locationNames.add(dataSnapshot.getKey());
        }
    
        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {
    
        }
    
        @Override
        void onChildRemoved(DataSnapshot dataSnapshot) {
    
        }
    
        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {
    
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {
    
        }
    });

    Können Sie jetzt mit locationNames zu tun, was Sie wollen.

  6. 0

    FB kann so schnell schauen, bis ein Knoten auf level 1, da kann es auf level 32. Die Tiefe ist nicht ein Faktor, der Einfluss auf die Geschwindigkeit auf einem technischen Niveau, das aber Jahre der Erfahrung mit der FB hat gezeigt, dass tief geschachtelte Daten, die oft hand in hand geht mit performance-Problemen. Als Beispiel, ich recomand Sie das Lesen der offiziellen Dokumentation, Best practices für Daten-Struktur in der Feuerstellung und Strukturierung Ihrer FB-Daten richtig für eine Komplexe App.

    Wenn Sie nicht wollen, ändern Sie Ihre eigentliche Struktur der Datenbank und die Annahme, dass location Knoten ist ein direktes Kind von Ihrem FB-root, siehe bitte den folgenden code:

    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference locationRef = rootRef.child("location");
    ValueEventListener eventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                String key = ds.getKey();
                Log.d("TAG", key);
            }
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    locationRef.addListenerForSingleValueEvent(eventListener);

    Ausgabe:

    punjab
    sindh
  7. 0

    Ich weiß, diese Frage wurde vor einer Weile und für android, aber ich war auf der Suche nach einer Lösung für dieses und kam auf diese Frage. Ich konnte nicht die Antworten, also hier ist die Lösung, die ich gefunden. Dies erhalten nur die Kinder und sonst nichts.

    Dies ist in javascript, aber Sie können die Methode verwenden, ist die alternative in java eine Anfrage von einem REST-Endpunkt.

    const databaseURL = "https://example.firebaseio.com" //replace value with yours
    const endpoint = "location"
    const user = firebase.auth().currentUser
    user.getIdToken()
      .then(token => {
        return fetch(`${databaseURL}/${endpoint}.json?auth=${token}&shallow=true`)
      })
      .then(response => {
        return response.json()
      })
      .then(json => {
        console.log({json}) //contains only the children
      })
      .catch(error => {
        console.log(error.message)
      })

    Der wichtige Teil hier ist die &shallow=true ansonsten bekommst du alle Daten, die in den Kindern.

    Mit curl wäre dies

    curl 'https://example.firebaseio.com/location.json?auth=INSERT_TOKEN&shallow=true'

    Diese übernimmt location ist ein Kind der Wurzel.

    Mehr details können gehabt werden, indem man die docs

    Bevor Sie diese, Sie haben zu stellen Sie sicher, dass Sie die currentUser-erhältlich in FB.

    Außerdem würde ich beherzigen, die Warnungen, die hier erwähnt über die richtige Feuerstellung Echtzeit-Datenbank-Struktur. Wenn Sie jedoch bereits an dieser Stelle, dann kann dies helfen.

  8. -1

    Dies ist, wie u bekommen kann Kind Namen

    HashMap<String, Object> allData = (HashMap<String, Object>) dataSnapshot.getValue();
    String[] yourChildArray = allData.keySet().toArray(new String[0]);

Kostenlose Online-Tests