Từ mọi thứ tôi đã đọc, dường như không thể truy vấn giá trị đa cấp. cấu trúc dữ liệu của tôi trông giống như sau:Truy vấn Firebase cháu/truy vấn đa cấp
{
"dinosaurs": {
"bruhathkayosaurus": {
"meta":{
"addedBy":"John",
"addedDate":"02021987"
},
"appeared": -70000000,
"height": 25
},
"lambeosaurus": {
"meta":{
"addedBy":"Peter",
"addedDate":"12041987"
},
"appeared": -76000000,
"height": 2.1
}
}
}
Mà không biết tên chủ chốt của khủng long, là có anyway để truy vấn các nút meta lấy chỉ mục được thêm vào bởi John.
Trong JS Một cái gì đó như:
var ref = new Firebase('test.firebaseio.com/dinosaurs');
ref.orderByChild("meta/addedBy")
.equalTo('Peter')
.on("child_added", function(snapshot) {
console.log(snapshot);
});
Có nhiều giải pháp hacky nhưng không ai là khả năng mở rộng, nên tôi chỉ làm phẳng dữ liệu này?
Edit:
tôi cần xem xét mã ... điều này sẽ là một giải pháp có thể chấp nhận?
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());
})
});
Hãy cẩn thận: khi bạn có 'on', bạn nên luôn xem xét khi' off' tương ứng xảy ra. Đối với cấp cao nhất 'on' có thể là "khi trang/ứng dụng bị đóng", nhưng 'on' của bạn trong cuộc gọi lại' child_added' sẽ dẫn đến việc xây dựng người nghe theo thời gian. Cách phổ biến để giải quyết vấn đề này là sử dụng 'once' trong vòng lặp, nhưng điều này thường dẫn đến hiệu suất tối ưu. –
Cũng thấy: http://stackoverflow.com/questions/30151012/is-there-a-way-in-angularfire-to-query-for-matching-and-condition –