2016-12-12 49 views
1

下面是当我推的数据火力地堡的代码:如何在使用.push()添加数据后查询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 } 

任何输入,将不胜感激。谢谢!

+0

什么是你想查询的? –

回答

1

如果你只是想“1”,而不是推键,请尝试使用.set()

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

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

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

+0

感谢@Shane的回复我所做的是使用.push().set(object); 原因是,如果我使用.set()它将清除任何以前是我设置的节点的子节点。所以使用.push()。set()我可以将另一个项目添加到book_id/pushkey /节点。 – Dave

+0

虽然我可以用这个代码在angularfire 2中查询过去的按键,但是我可以用这个代码来查询这个按键。'codeOnInit(){0} ).subscribe( data => { console.log('本书日志数据为:$ {data [0] .pageOrder}'); //现在只返回值1 console.dir(data); (书籍日志/ $(012)),(error)=> {console.log('book log error:$ {error}');} ) } – Dave

+0

@Dave所以你试图保存多个结果到' {uid}/$ {book_id})'ref,然后只查询实际值,而不是键,正确? – Shane

相关问题