【问题标题】:Does Firebase send ALL the data under a given path?Firebase 是否会在给定路径下发送所有数据?
【发布时间】:2018-08-27 19:12:09
【问题描述】:

我对 Firebase 自动获取多少数据感到有些困惑,而且我很难对数据进行建模。

据我了解,将经过身份验证的用户 ID 与路径进行比较;如果缺少密钥,则路径无法访问。此外,一旦调用路径,就会访问其中的所有数据。

例如,获取/cart/<$uid>/<item> 还将包括$uid1、$uid、$uid3 ... $uidN 等。因此,如果我要将所有数据嵌套在/<$uid> 下,例如:

/<$uid>/cart

/<$uid>/orders

/<$uid>/transactions

这是否意味着获取/<$uid>/cart 也会返回所有其他键?如果我只打电话给<$uid>怎么办?

如果结构是先cart/或orders/,这是否意味着所有用户的所有订单都被抓取?

换句话说,当用户登录时,我想检索(使用这些“模式”之一)购物车的内容:

// Fires onAuthStateChanged()
firebaseListener(function authStateChange(loggedIn, user) {
  if (store) {
    if (user) {
      store.dispatch('getShoppingCart', { uid: user.uid, currentCart: store.getters.cartItemList });
      store.dispatch('setUser', user);
    }
  }
})

getShoppingCart 然后运行类似于:

let ref = db.ref('/cart/' + store.state.uid + '/')
ref.on('value', (snapshot) => {
  store.cart.concat(snapshot)
})

【问题讨论】:

  • 请添加一些(伪)代码来解释在这种情况下获取的含义。
  • @AndréKool 就这么简单;我的问题更多是关于设计模式。如果购物车先行,用户 ID 次要,这是否意味着以这种方式访问​​路径意味着如果不在快照中,至少会考虑每个子用户购物车?
  • 我认为您在这里混淆了安全规则($uid 通配符)和 firebase 中的实际读/写。你能链接到你从哪里得到这个吗?

标签: javascript firebase vue.js nosql denormalization


【解决方案1】:

当用户登录时,您正在检索该用户的信息,因此当您使用uid 时,您正在检索该登录用户的 id。

当您使用此ref('/cart/' + store.state.uid + '/') 时,它将首先转到cart 节点,然后是该用户的uid,而不是购物车下的所有用户ID。

您也可以使用once('value').then(function(snapshot) {,它只会读取一次数据,不会再次触发。

【讨论】:

    猜你喜欢
    • 2018-06-22
    • 2018-09-12
    • 1970-01-01
    • 2020-07-04
    • 2018-09-15
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多