我在 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”类型的帐户。这是怎么回事?
最佳答案
当您对 Firebase 数据库执行查询时,可能会出现多个结果。因此快照包含这些结果的列表。它本质上包含三部分信息:每个匹配子节点的键、每个匹配子节点的值以及匹配子节点的顺序。
当您调用 r.val()
时,您将上面的内容转换为单个 JSON 对象,该对象仅包含键和值。此时,您会失去结果之间的顺序。要保持顺序,请确保使用内置的 DataSnapshot.forEach()
方法循环结果:
.then(snapshot => {
var result = [];
snapshot.forEach(child => {
result.push(child.val());
})
return result;
})
关于javascript - 使 firebase 返回排序后的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54292089/