我有一个查询,它会返回快照;
ref.orderByChild("index").equalTo(currentIndex).once("value", function(snapshot) {})
当我使用;
打印快照时console.log(snapshot.val());
打印如下;
{'-LBHEpgffPTQnxWIT4DI':
{
date: '16.05.2018',
first: 'let me in',
index: 1,
second: 'let others in'
}
},
我需要获取此日期,此快照的第一个值。
我试过了;
childSnapshot.val()["first"]
childSnapshot.val()["date"]
或
childSnapshot.child.('first')
childSnapshot.child.('date')
但没有成功。
请告诉我我正在做的错误......
我的完整代码如下;
var indexRef = db.ref("/LastIndex/");
var ref = db.ref("/Source/")
indexRef.on("value", function(indexSnapshot) {
console.log(indexSnapshot.val());
var currentIndex = indexSnapshot.val()
ref.orderByChild("index").equalTo(currentIndex).once("value", function(snapshot) {
console.log(snapshot.val());
if(snapshot !== null) {
snapshot.forEach(function (childSnapshot) {
if(childSnapshot !== null) {
var newRef = db.ref("/ListTest/");
var key = newRef.push({
"firstLanguageWord": childSnapshot.val()["first"] ,
"secondLanguageWord": childSnapshot.val()["second"] ,
"wordType": childSnapshot.val()["type"],
"date": childSnapshot.val()["date"],
"translateType": childSnapshot.val()["transType"]
});
currentIndex++;
indexRef.set(currentIndex);
}
});
}
});
BR,
Erdem的
答案 0 :(得分:1)
更新,根据您的评论和原始问题的更新:
如果你的代码看起来是无限的,那就是#34;这是因为你在第一个查询中使用了on()方法。事实上,on()
方法"会在特定位置监听数据更改。",如here所述。
如果您只想查询引用,请改用once()
方法。该文档为here。
以下是Query,因为您使用Reference(以及orderByChild()
方法)调用equalTo()
方法。
ref.orderByChild("index").equalTo(currentIndex)
正如文档中所解释的here:
即使查询只有一个匹配项,快照也是如此 还是一个清单;它只包含一个项目。要访问该项目,您 需要循环结果:
ref.once('value', function(snapshot) { snapshot.forEach(function(childSnapshot) { var childKey = childSnapshot.key; var childData = childSnapshot.val(); // ... }); });
所以你应该这样做:
ref.orderByChild("index").equalTo(currentIndex).once("value", function(snapshot) {
snapshot.forEach(function(childSnapshot) {
console.log(childSnapshot.val().first);
console.log(childSnapshot.val().date);
});
});