firebase因child_added事件而检索来自不同子节点的数据

时间:2018-03-05 12:43:57

标签: javascript firebase firebase-realtime-database

我的firebase数据库包含一个用户列表,每个用户都有包含其位置和时间戳的列表。 runner |__1f9097c12fcfeac3259bd2be4a976933 |__27305d166e57b5fdf9b96142c7d28ab1 |__-L6R_u41IeEDy7rQ9udG | |__timestamp | |__position |__887527fea0ebca4c416e154e7bb8c95d |__-L6_KYQravVkxXNVK6V1 | |__timestamp | |__position |__-L6_KekNbzzNrLY8G-IY | |__timestamp | |__position

' 887527fea0ebca4c416e154e7bb8c95d',' 27305d166e57b5fdf9b96142c7d28ab1',...等是从mysql表中检索的用户ID。 ' -L6_KYQravVkxXNVK6V1',' -L6_KekNbzzNrLY8G-IY',...等是firebase在推送数据时生成的密钥。

我正在查询1个特定用户的位置

firebase.database().ref().child("runner").child(key).orderByChild("timestamp").startAt(startdate).endAt(enddate).on("child_added", function(data) {...})

在查询用户1的位置时,如果为用户2添加了子项,我将获得用户2的位置,但上述查询中的key仍然指向用户1。

2 个答案:

答案 0 :(得分:1)

要解决此问题,请阅读一次数据:

firebase.database().ref().child("runner").child(key).orderByChild("timestamp").startAt(startdate).endAt(enddate).once('value').then(function(snapshot) {
snapshot.forEach(function(child) {
var childData = child.val();
var timestamps=child.val().timestamp;
var position=child.val().position;
   )};
)};

更多信息:

https://firebase.google.com/docs/database/web/read-and-write#read_data_once

答案 1 :(得分:1)

我收到了不同用户的详细信息,因为在选择每个用户时,我附加了一个child_added事件监听器。在更改用户时,我没有从以前的用户中删除侦听器。因此,当新孩子被添加到不同的用户时,我正在获取他的详细信息。解决方案是在更改为不同用户时,从先前用户中删除侦听器。 firebase.database().ref().child('runner/'+prev_key).off();