我的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。
答案 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();