我在Firebase上有一个数据库。我正在努力做到这一点,以便当用户键入一个值时,他们会得到10个最接近的建议。到目前为止,这是我的查询:
<textarea className='addFriendTextArea' onChange={handleChange} placeholder='Dodaj znajomego'/>
handleChange = async (e) => {
const {value} = e.target;
firebase
.database()
.ref('Users')
.orderByChild('nickname')
.startAt(value)
.limitToFirst(10)
.once('value')
.then(r => arrayFromObject(r.val()))
.catch(e => console.log(e));
};
这几乎可行。问题是,如果我输入铁,例如,我会得到:
如果我输入例如brunonbane3,这就是我得到的:
因此未对它们进行排序。我知道我可以使用前端JavaScript对其进行排序,但是有没有办法使用Firebase对其进行排序?
也不应该输入确切的昵称,例如铁,只返回一条记录吗?没有“ iron2”类型的帐户。这是怎么回事?
答案 0 :(得分:1)
对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。它本质上包含三部分信息:每个匹配的子代的键,每个匹配的子代的值以及匹配的子节点的顺序。
调用r.val()
时,您会将上面的内容转换为单个JSON对象,该对象仅具有键和值的位置。此时,您将失去结果之间的顺序。要保持顺序,请确保使用内置的DataSnapshot.forEach()
方法遍历结果:
.then(snapshot => {
var result = [];
snapshot.forEach(child => {
result.push(child.val());
})
return result;
})