通过“onchildchanged”和“onchildadded”从firebase数据库获取嵌套数据会返回无法识别的内容

时间:2016-11-08 09:05:52

标签: javascript firebase firebase-realtime-database

console_screenshot

这是控制台的屏幕截图,显示输出,即在其中一个用户的消息目录中添加的子项。

此外,必须注意到我已经显示了非常短的控制台部分,因为控制台为每条消息显示类似的输出。如果需要更多屏幕截图来澄清,请告诉我,我会添加它们!

这是我的json代码:

{
"Tf42glUiUvbF1yGMX1CseYD6EVC3" : {
  "intents" : {
    "intentFields" : "",
    "intentName" : ""
  },
  "messages" : {
    "-KViVgc7ZG051eMXP0-5" : {
      "name" : "Ed",
      "photoUrl" : "https://cdn1.iconfinder.com/data/icons/user-pictures/100/male3-512.png",
      "text" : "Hello, I'm Ed, your personal assistant cum friend",
      "timeStamp" : "1476880306"
    },
    "-KW3C8azYBP_-BIlWmNV" : {
      "name" : "Aakash Bansal",
      "photoUrl" : "https://lh5.googleusercontent.com/-oQyA4HXVycc/AAAAAAAAAAI/AAAAAAAAHKo/Ov0A0p0LjiY/s96-c/photo.jpg",
      "text" : "hi",         //this is the message displayed in the console above.
      "timeStamp" : "1478613047"
    }
  }
},
"gFiPrpHcHeMkqG2tGUi1aolIR3x1" : {
  "intents" : {
    "intentFields" : "",
    "intentName" : ""
  },
  "messages" : {
    "-KViVgc7ZG051eMXP0-5" : {
      "name" : "Ed",
      "photoUrl" : "https://cdn1.iconfinder.com/data/icons/user-pictures/100/male3-512.png",
      "text" : "Hello, I'm Ed, your personal assistant cum friend",
      "timeStamp" : "1476880306"
    }
  }
}

}

这是我的node.js代码:

ref.on("child_changed", function(snapshot){
    snapshot.ref.child("messages").on("child_added", function(itemSnapshot) {
        var mytemp = itemSnapshot.child("text");
    console.log(mytemp);
  });
});



注意我在stackoverflow上查看了一些类似的问题但是当我实现它们时,我发现它们属于firebase的过时版本,并且在当前版本中不起作用。 />
编辑通过使用以下代码,我现在为每个添加的孩子获得null。另外,我想询问如何获取其子项已更改的父级或用户ID。 代码是:

ref.on("child_changed", function(snapshot){
//using limitToLast(1) to get last value only
snapshot.ref.child("messages").orderByKey().limitToLast(1).once("value", function(itemSnapshot) {
    var mytemp = itemSnapshot.child("text").val();
console.log(mytemp);

}); });

console.png这是使用此代码后控制台的屏幕截图 我得到了关于aove问题的答案,但唯一仍然存在的疑问是如何获得孩子已经改变的节点的父节点?

如果需要,请随时要求进一步澄清 谢谢!

1 个答案:

答案 0 :(得分:1)

I think you may be looking for this:

ref.on("child_changed", function(snapshot){
    snapshot.child("messages").forEach(function(itemSnapshot) {
        var mytemp = itemSnapshot.child("text").val();
        console.log(mytemp);
    });
});