我有一个Firebase数据库,其中在特定的节点级别上有日期,每个日期都有键值对,并带有特定数字的值。现在,我需要查找过去两天中常见的数字。
我首先获取一个日期的快照,然后希望通过另一个日期的快照迭代每个值。
var numbers1 = firebase.database().ref('abc/def/'+date1);
var numbers2 = firebase.database().ref('abc/def/'+date2);
numbers1.on('value',function(snapshot) {
numbers_day1 = snapshot.val();
});
现在,是否可以同时传递date2的快照,以便进行迭代功能?是否可以在date1事件处理程序本身内部添加另一个date2事件处理程序?
数据库结构:
DATABASE
[EMP
[DATE1
[KEY1
[NUMBER1]
]
[KEY2
[NUMBER2]
]
]
[DATE2
[KEY1
[NUMBER1]
]
]
]
类似地,它还会显示更多的日期和数字。
答案 0 :(得分:1)
使用Promise.all()方法。像下面一样
var numbers1 = firebase.database().ref('abc/def/'+date1).on('value');
var numbers2 = firebase.database().ref('abc/def/'+date2).on('value');
如果您将数字1和数字2传递给promise.all()方法,因为它们返回了诺言。因此promise.all()方法将等待两个promise返回值。
例如
var numbers1Snap, numbers2Snap ;
Promise.all([numbers1,numbers2]).then(function(snaps){
numbers1Snap = snaps[0]; // numbers1
numbers2Snap = snaps[1]; // numbers2
numbers1Snap.forEach(function(num){
var num1Key = num1Snap.key; //for example i'm matching keys to get the data
numbers2Snap.forEach(function(num2Snap){
var num2Key = num2Snap.key
if(num1Key === num2Key){
console.log("Matching Record " +num2Snap.val());
}
});
});
});
答案 1 :(得分:0)
也许有更好,更快的解决方案,例如以number1
和number2
处于同一快照下的方式来收缩数据。构建数据和使用索引可能比尝试下面的解决方案更好。
但是您确实询问过迭代,您可以尝试找到一个值,然后搜索第二个值,例如:
var numbers1 = firebase.database().ref("abc/def/" + date1);
var numbers2 = firebase.database().ref("abc/def/" + date2);
numbers1.on("value", function(snapshot) {
snapshot.forEach(function(rowData) {
numbers2.on("value", function(snapshot2) {
snapshot2.forEach(function(rowData2) {
console.log(rowData2 === rowData);
});
});
});
});