簡體   English   中英

在Firebase中檢索非規范化數據

[英]Retrieving denormalized data in firebase

我是Firebase的新手,了解到我應該以非規范化的方式保存數據。 我保存了用戶編寫的一些目標。 我允許其他用戶添加評論。 很好 每當用戶提交評論時,該評論將保存在評論節點中,並且還可以通過向相關評論ID添加密鑰來更新目標。

**comments**
    -LmkoRGfB5GX4Q8NKkBz
    -LmkoTE3sdM3_PYuEtco
        comment-text: "another comment"
        time: 87293862
   -LmlUwUdsUVH5ymTXDoj
   -LmlyU2drjD6gI7GGZzp

**goals**
   -user1
       goalID1
          comments
            -LmkoTE3sdM3_PYuEtco: true
          goal: "I struggle to wake up on time"
          plan: "I will definitely wake up when the alarm clock ..."

在檢索有關目標的信息時,我不知道如何檢索注釋。 這是我檢索有關目標的信息的方式。 如何添加循環以獲取有關評論的信息?

firebase.database().ref('/goals/' + req.body.userId).orderByChild(goalId).equalTo("goalID1").on('value', (snapshot) => {
      snapshot.forEach((item) => {
        items.push({
          key: item.key,
          goal: item.val().goal,
          plan: item.val().plan,
          comments:item.val().comments
        });
      });

      res.status(200).json(items)

這樣的事情應該可以解決問題:

firebase.database().ref('/goals/' + req.body.userId).orderByChild(goalId).equalTo("goalID1").on('value', (snapshot) => {
  let promises = [];
  var item;
  snapshot.forEach((item) => {
    item = {
      key: item.key,
      goal: item.val().goal,
      plan: item.val().plan,
      comments: []
    }
    snapshot.child('comments').forEach((commentKey) => {
      let promise = firebase.database().ref('comments').child(commentKey.key).once('value');
    });
  });
  Promise.all(promises).then((snapshots) => {
    snapshots.forEach((snapshot) => {
      item.comments.push(snapshot.val());
    })
    items.push(item);
    res.status(200).json(items);
  })

可能會出現一些語法和范圍錯誤,但這應該是一個大概的主意:您在循環中加載每個注釋,因此必須等待所有注釋加載后才能向調用方發送響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM