如何在Firebase中为儿童导航?

j13ufse2  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(101)

我使用的是Firebase Realtime Database,根目录下有一些键,键里面有键和子键,我需要监听某个子键的值,例如结构如下:

root
├── d775810
│   ├── datas_for_type
│   │   └── timestamp
│   │       └── multiple list datas  
│   └── reportFlag 
│       └── timestamp
│           └── flagAnnotation:True
└── a413ba21
    ├── datas_for_type
    │   └── timestamp
    │       └── multiple list datas 
    └── reportFlag 
        └── timestamp
            └── flagAnnotation:False

我需要监听“flagAnnotation”子节点,如果为真,我将访问具有相同时间戳的数据并创建PDF,如何监听这个子节点的值?
我试过这个:

dbRef.ref().on("child_added", (snapshot) => {
    console.log(`Child added: ${snapshot.key}`);
});

这只给予了d775810,a413ba21 ..如果▷添加根,ıt将给出它们。

py49o6xq

py49o6xq1#

Firebase实时数据库读取总是返回满节点。这意味着您不能只侦听flagAnnotation属性。
不过,您 * 可以 * 监听整个JSON分支,然后导航所获得的数据快照,只显示flagAnnotation值。

firebase.database().ref().get('value').then((rootSnapshot) => {
  rootSnapshot.forEach((childSnapshot) => {
    console.log(childSnapshot.val().reportFlag.timestamp.flagAnnotation);
  });
})

如果JSON中的timestamp是动态的,则需要另一个forEach来循环这些子对象,它将变为:

firebase.database().ref().get('value').then((rootSnapshot) => {
  rootSnapshot.forEach((childSnapshot) => {
    const reportFlagSnapshot = childSnapshot.child('reportFlag');
    reportFlagSnapshot.forEach((timestampSnapshot) => {
      console.log(timestampSnapshot.key, timestampSnapshot.val().flagAnnotation);
    })
  });
})

相关问题