【问题标题】:How to query Firebase data after using .push() to add data?使用 .push() 添加数据后如何查询 Firebase 数据?
【发布时间】:2016-12-12 23:39:48
【问题描述】:

这是我将数据推送到 Firebase 时的代码:

firebase.database().ref(`booklogs/${uid}/${book_id}`).push(page_id)

booklogs : 
{HUMjSHxVKAPfVXzOId9zCBkGOgv1:{
 book28917: {
 -KYp4FdYYODDZG1FX-Pb: 1
}
}
}

我的问题是当我查询数据时,${book_id} 的子节点包含推送键,但我只想获取 1 的值而不是推送键。

我用来查询的代码是:

var booklogs = db.ref(`booklogs/${uid}/${project}`); 

booklogs.once('value')
  .then((snapshot) => {
    console.log(`pages viewed are  ${snapshot.key}: ${snapshot.val()}`);
    console.dir(snapshot.val());
  }).catch((error) => {
    console.log(`Error : ${error}`);
  });

控制台返回的数据是:

pages viewed are  2634651: [object Object]                                                                            
{ '-KYp4FdYYODDZG1FX-Pb': 1 } 

任何意见将不胜感激。谢谢!

【问题讨论】:

  • 你想查询什么?

标签: javascript node.js firebase firebase-realtime-database


【解决方案1】:

如果您只想要“1”而不想要按键,请尝试使用.set()

firebase.database().ref(`booklogs/${uid}/${book_id}`).set(page_id)

这将摆脱对象,只为您提供您想要的价值。 Push 会为您添加的每个值自动生成一个键,因此您将始终返回一个对象。来自 Firebase 文档 - “对于基本的写入操作,您可以使用 set() 将数据保存到指定的引用,替换该路径中的任何现有数据。”

https://firebase.google.com/docs/database/web/read-and-write

【讨论】:

  • 感谢@Shane 的回复我所做的是使用 .push().set(object);原因是如果我使用 .set() 它会清除以前我设置的节点的子节点的任何内容。因此,使用 .push().set() 我可以将另一个项目添加到 book_id/pushkey/ 节点。
  • 有趣的是,虽然我可以在 angularfire 2 code ngOnInit() { this.af.database.list(booklogs/${uid}/${book_id}).subscribe( data => { console.log(this book log data is : ${data[0].pageOrder}); // 现在只返回值 1 console.dir(data); }, (error) => {console.log(book log error: ${error});} ) }
  • @Dave 所以你试图将多个结果保存到.ref(booklogs/${uid}/${book_id}) ref,然后只查询实际值,而不是键,对吗?
  • 您能否对整个对象进行快照.val(),然后遍历每个键以获得您想要的值?
  • 干杯@Shane,现在才看到你的评论,是的,这就是我最终做的!干杯!
猜你喜欢
  • 2018-10-14
  • 1970-01-01
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多