2016-04-05 7 views
1

Ich versuche, eine Datenbank für eine Immobilienagentur mit Firebase zu erstellen. Ich entscheide, eine Flatten-Datenbank zu erstellen, aber ich brauche Hilfe .. (Ich verwende AngularJS)Wie Abfragen von Daten in einer abgeflachten Firebase-Struktur?

Hier ist ein Beispiel aus der Datenbank:

"city" : { 
    "Montpellier" : { 
     "xx2" : true, 
     "xx3" : true 
    }, 
    "Teyran" : { 
     "xx1" : true 
    } 
    }, 
    "owners" : { 
    "xxx1" : { 
     "lastname" : "Duparc", 
     "name" : "Jean" 
    }, 
    "xxx2" : { 
     "lastname" : "Dupont", 
     "name" : "Henry" 
    }, 
    "xxx3" : { 
     "lastname" : "Wood", 
     "name" : "John" 
    } 
    }, 
    "prices" : { 
    "xxx1" : 405000, 
    "xxx2" : 100000, 
    "xxx3" : 122000 
    }, 
    "type" : { 
    "appartment" : { 
     "xx2" : true 
    }, 
    "home" : { 
     "xx1" : true 
    }, 
    "land" : { 
     "xx3" : true 
    } 
    } 

XX1, XX2, XX3 ist die Refs für jedes Produkt.

In dieser Datenbank, die wir in dem Knotentyp sehen, dass, gibt es:

  • ein Haus (Haus): XX1
  • eine Wohnung: XX2
  • ein Land: XX3

Die Frage ist: Was ist, wenn ich jedes Produkt mit Typ auflisten möchte: Apartment?

Dann, wenn ich die Ref von jedem Apartment bekommen kann, wie kann ich die Details für dieses Produkt konstruieren?

Ich meine, wie kann ich den Namen, Nachnamen der Besitzer, Preis, Stadt, etc?

Antwort

1

Was Sie in Ihrer Datenstruktur gezeigt haben, sind die Indizes.

Sie werden in der Regel auch eine Liste mit der Masterkopie für jede Eigenschaft:

"properties": { 
    "xx1": { 
    "city": "Teyran", 
    "owner": "Jean Duparc", 
    "price": 405000, 
    "type": "home", 
    }, 
    "xx2": { 
    "city": "Montpellier", 
    "owner": "Henry Dupont", 
    "price": 100000, 
    "type": "apartment", 
    }, 
    "xx3": { 
    "city": "Montpellier", 
    "owner": "John Wood", 
    "price": 122000, 
    "type": "land", 
    } 
} 

Jetzt mit unserem Indizes und der obigen Struktur können Sie zum Beispiel der Wohnungen mit Blick nach oben:

ref.child('type').child('apartment').on('value', function(keys) { 
    keys.forEach(function(keySnapshot) { 
    ref.child('properties').child(keySnapshot.ref().key()).once('value', function(propertySnapshot) { 
     console.log(propertySnapshot.val()); 
    }); 
    }); 
}) 

Um eine Eigenschaft zu aktualisieren, verwenden Sie eine multi-location update. Zum Beispiel, um den Besitzer von xx1 zu aktualisieren:

var updates = {}; 
updates['/properties/xx1'] = property; 
updates['/owners/Jean Duparc/'+id] = null; 
updates['/owners/Runfast Webmaster/'+id] = true; 
ref.update(updates); 
+0

Franck, vielen Dank für diese Antwort sehr klar !!! Es hilft mir sehr !!!! –

+0

Franck, ich bekomme diesen Fehler: TypeError: keySnapshot.key ist keine Funktion. (In 'keySnapshot.key()' ist 'keySnapshot.key' nicht definiert) –

+0

Typo: 'keySnapshot(). Ref(). Key()'. Beachten Sie, dass Firebase ziemlich anständige [Referenzdokumentationen] (https://www.firebase.com/docs/web/api/) hat, um Ihnen mit dieser Art von Sachen zu helfen. –

Verwandte Themen