2017-07-19 27 views

回答

2

你可以用火力数据库orderByChildequalTo方法。从火力参考

OrderByChild:

orderByChild orderByChild(路径)返回firebase.database.Query

它生成由指定的子键排序的新查询对象。

查询一次只能按一个键进行排序。在同一个查询中多次调用orderByChild()是一个错误。从火力参考

equalTo:

equalTo(值,键)返回firebase.database.Query

创建查询,其包括包含指定值的儿童。

使用startAt(),endAt()和equalTo()允许我们为查询选择任意的起点和终点。

可选的键参数可用于进一步限制查询的范围。如果已指定,则具有完全指定值的子项也必须具有指定的键作为其键名。这可用于过滤具有相同值的许多匹配的结果集。

Firebase查询允许您通过任何子密钥即时订购您的数据。但是,如果您事先知道您的索引是什么,您可以通过安全规则中的.indexOn规则来定义它们,以获得更好的性能。

代码为您的问题:

const requestRef = firebase.database().ref('request'); 
requestRef.orderByChild('apply') 
      .equalTo(true) 
      .once('value') 
      .then(snapshot => snapshot.val()) 
      .then((data) => {// your handle code here}) 

完整文档here

+0

谢谢,男人! –

1

是,你可以在你的情况下使用OrderByChild为好。这应该工作。

var query = firebase.database().ref('request').orderByChild('apply').equalTo('true'); 
query.once('value', function (snapshot) { 
    console.log(snapshot.val()) //contains all users that has apply as true 
}) 
+0

这确实有效,尽管我建议循环播放结果而不是记录它们(以确保它们保持顺序)。请参阅https://firebase.google.com/docs/database/web/lists-of-data#listen_for_value_events此外:严格来说,这不再是'ref',而是一个查询。 :-) –

+0

是的,你是对的。我更新了我的答案。谢谢。 :-) –

+0

谢谢,伙计! –