Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于引用的Firebase查询:true_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript 用于引用的Firebase查询:true

Javascript 用于引用的Firebase查询:true,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我在firebase上获取结构复杂的数据时遇到问题。 我有一个这样的结构: place1: { visits: { user1: true, user2: true, user3: true, user4: true } }, place2: { visits: { user1: true, user3: true, user4: true } }, place3: { visits: { user2: true, user3: true, us

我在firebase上获取结构复杂的数据时遇到问题。 我有一个这样的结构:

place1: {
 visits: {
  user1: true,
  user2: true,
  user3: true,
  user4: true
 }
},
place2: {
 visits: {
  user1: true,
  user3: true,
  user4: true
 }
},
place3: {
 visits: {
  user2: true,
  user3: true,
  user4: true
 }
}
如何查询所有去过所有地方的用户


非常感谢你的帮助

您当前的数据结构允许您高效地罚款所有去过特定地点的用户。它不允许您高效地查询特定用户去过的所有地方

要允许第二次查询,应添加第二个数据结构:

user1: {
  place1: true,
  place2: true
},
user2: {
  place1: true,
},
user3: {
  place1: true,
  place3: true
},
user4: {
  place1: true,
  place2: true,
  place3: true,
  place4: true
}
有了这个额外的结构(通常称为反向索引),您可以找到每个用户去的地方

由于您现在有两个结构,因此需要确保将每次访问都添加到这两个地方。单个多位置更新可以实现以下功能:

function recordVisitor(uid, placeid) {
  var updates = {};
  updates[`/userVisits/${uid}/${placeid}`] = true;
  updates[`placeVisitors/${placeid}/${uid}`] = true;
  firebase.database().ref().update(updates);
}

另请参见我对相关用例(在类别中查询项目)的回答,该用例也需要反向索引:

非常感谢。然而,这种数据结构是可伸缩的吗?