以下是我的Firebase数据示例:
我需要能够搜索给定用户的userFavorites(此处,afaapy ...)并返回按值(时间戳)排序的结果,以便按添加日期的顺序获取所有用户的收藏夹到数据库。
我可以按键搜索如下,并检索给定用户的所有收藏夹:
databaseRef.child("userFavorites").queryOrderedByKey().queryEqual(toValue: user.uid).observe(...)
但这些好处是按他们的钥匙排序的。如果我按照以下方式尝试按值排序,我得到"不能使用多个queryOrderedBy调用!":
databaseRef.child("userFavorites").queryOrderedByKey().queryEqual(toValue: user.uid).queryOrderedByValue().observe(...)
如何检索按其值排序的给定用户的收藏夹?
第二个问题:是否有更简单的方法按照添加到数据库的顺序检索数据?
答案 0 :(得分:2)
您无法按照文档here
多次订购相同的参考号当您使用order
或filter
方法时,它会返回Query Interface。将其视为仅包含原始数据子集的过滤参考。这意味着
databaseRef.child("userFavorites").orderByKey().equalTo(user.uid)
不会返回userFavorite/${user.uid}
,但userFavorite
会过滤以仅显示user.uid
条目。你可以通过
databaseRef.child("userFavorites").orderByKey().equalTo(user.uid).ref.key
那应该返回'userFavorites'
在您的情况下,我看到两个选项:
继续使用orderByKey().equalTo()
并自行对结果进行排序
或直接使用child()
获取用户,然后通过Firebase排序(并且不要忘记使用Firebase' snapshot.forEach
以确保您获取数据查询顺序):
databaseRef.child(`userFavorites/${user.uid}`).orderByValue().once('value', (snapshot) => {
if (snapshot.exists()) {
snapshot.forEach((child) => {
console.log(`${child.key}: ${child.val()}`)
})
}
})