我试图从DataSnapshot中提取嵌套字典。
var query = admin.database().ref("meetings").orderByChild("deadline");
query.once("value").then((snapshot) =>
{
snapshot.forEach((child) =>
{
console.log(snapshot.val());
}
}
此代码打印出:
{
'82BE0F33-6812-4EFF-8CB4-FABDACA2B329':
{
deadline: 1509634558,
name: 'cfedfgh',
users:
{
'8YUDtUJuIde8fLaHCfeuSNsHUyq2': '1',
DVAYNspxcGfB001RSkq3S8cxvsH3: '1',
fJXgRJBoFAU0SmA2Zhn4DpdyLGh1: '1'
}
}
}
我如何创建字典用户值数组?或者完全访问它们。
执行console.log(child.child("users").val());
会给我一个null
。
数据库结构:
答案 0 :(得分:1)
使用DataSnapshot#child()
会为您指定相对路径的位置提供另一个DataSnapshot
。因此,带有子级的DataSnapshot
被视为父节点,因此没有特定值,因此val()
将不起作用。
为了将users
值转换为任何数组,您需要迭代它下面的每个子节点并将键传递给数组,如下所示:
snapshot.forEach((child) => {
let users = [];
if (child.child("users").exists()) {
child.child("users").forEach((userSnapshot) => {
users.push(userSnapshot.key);
});
}
console.log(users);
}
答案 1 :(得分:0)
假设snapshot
是一个对象数组,您可以使用以下内容。这将为您提供每条记录的所有用户。
const users = [].concat.apply([], snapshot.map(row => {
return Object.keys(row).map(key => {
return row[key].users
})
}))
console.log(users)