【问题标题】:Listening to changes depends on the nested UID监听变化取决于嵌套的 UID
【发布时间】:2019-12-18 08:37:12
【问题描述】:

我在 Firebase 实时数据库中有这个结构:

myCollection:
 - GAKlajGHAHjgghk
   - value: "My content"
   - users:
     - JAHGHJgjfKSJKKJGKJj
     - OPouiOHUIUOYHSioJhD
     - RJFvkJlkhgJTKghgJGh
 - LUhjkHSLKlkdlkd
   - value: "My content number 2"
   - users:
     - JAHGHJgjfKSJKKJGKJj
     - OPouiOHUIUOYHSioJhD

我想写一个函数来监听变化和新值

当一个项目出现在 myCollecion 目录中时,该项目在其子目录 users 中包含我的用户 UID,我应该收到这个对象

反应应该发生在:

  • 一个新项目将与相应的 UID 一起添加到 myCollection
  • 现有项目更改时

我的代码:

const myRef = firebase
  .database()
  .ref('myCollection/')
  .child('users')
  .orderByKey()
  .equalTo(this.state.user.uid);

myRef.on('value', snapshot => { ... });

上面的代码不起作用。我做错了什么?

【问题讨论】:

    标签: javascript firebase react-native firebase-realtime-database


    【解决方案1】:

    您需要执行以下操作:

    const myRef = firebase
      .database()
      .ref('myCollection/')
      .child('GAKlajGHAHjgghk')
      .child('users')
      .orderByKey()
      .equalTo(this.state.user.uid);
    
    myRef.on('value', snapshot => { ... });
    

    你需要从上到下遍历数据库而不跳过一个节点。在您的数据库中,您有:

    myCollection/ -> GAKlajGHAHjgghk -> users
    

    【讨论】:

    • 我不知道 myCollecion 中的 UID 位置。创建对象时,会动态创建 UID
    • 那么首先你需要检索uid然后你可以在users下的id查询
    • 除非解决方案是在创建对象后,我还会通知用户对象应该跟踪该对象。我会将这些 UID 写入用户对象的子集合中。这是个好方法吗?
    • 结构有点奇怪,你能解释一下你想要实现的目标吗
    猜你喜欢
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-20
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多