Von allem, was ich gelesen habe, scheint es nicht möglich, einen mehrstufigen Wert abzufragen. Meine Datenstruktur wie folgt aussieht:Firebase Abfrage Enkel/Multilevel-Abfrage
{
"dinosaurs": {
"bruhathkayosaurus": {
"meta":{
"addedBy":"John",
"addedDate":"02021987"
},
"appeared": -70000000,
"height": 25
},
"lambeosaurus": {
"meta":{
"addedBy":"Peter",
"addedDate":"12041987"
},
"appeared": -76000000,
"height": 2.1
}
}
}
Ohne die Schlüsselnamen der Dinosaurier zu kennen, ist es trotzdem, die Meta-Knoten nur Elemente hinzugefügt von John Abrufen abzufragen.
In JS So etwas wie:
var ref = new Firebase('test.firebaseio.com/dinosaurs');
ref.orderByChild("meta/addedBy")
.equalTo('Peter')
.on("child_added", function(snapshot) {
console.log(snapshot);
});
Hacky Lösungen Es gibt aber keine sind skalierbar, sollte ich diese Daten abzuflachen gerade?
Edit:
Ich brauche einen Code-Review ... wäre dies eine akzeptable Lösung sein?
var ref = new Firebase('test.firebaseio.com/dinosaurs');
ref.orderByChild("meta")
.on('child_added',function(snap1){
snap1.ref().orderByChild("addedBy")
.equalTo("Peter")
.on('child_added', function(snap2) {
console.log(snap2.val());
})
});
Seien Sie vorsichtig: Wenn Sie ein 'on' haben, sollten Sie immer überlegen, wann das entsprechende' off' passiert. Für Top-Level-'On's das kann sein, wenn die Seite/App geschlossen ist, aber Ihr' On' im 'Child_Added'-Callback führt zu einer Anhäufung von Listenern im Laufe der Zeit. Der übliche Weg, dies zu lösen, ist die Verwendung von "einmal" in der Schleife, was jedoch oft zu einer suboptimalen Leistung führt. –
Siehe auch: http://stackoverflow.com/questions/30151012/is-there-a-way-in-angularfire-to-query-for-matching-and-condition –