javascript - Firebase 查询引用 : true

标签 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,
  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);
}

另请参阅我对也需要倒排索引的相关用例(查询类别中的项目)的回答:http://stackoverflow.com/questions/40656589/firebase-query-if-child-of-child-contains-a-value

关于javascript - Firebase 查询引用 : true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44379073/

相关文章:

android - Firebase Android Studio (2.2.3) 问题

android - 从 Firebase 实时数据库 Android 查询嵌套数据

swift 3 : How to retry Firebase upload on failure

javascript - 什么决定了 Javascript 中被读取的行的顺序?

javascript - 如何使用 javascript 操作从 html 输入中获取的日期

javascript - 如何防止原型(prototype)显示在数组上

javascript - 如何在表单提交事件后*运行一些 JavaScript?

javascript - Firebase Cloud Function 错误,函数返回未定义、预期 Promise 或值

android - Firestore Core初始化错误,没有任何作用

android - 控制firebase数据库中onChildAdded事件的发生