Firebase 按键搜索,按值排序
以下是我的Firebase数据示例: 我需要能够搜索给定用户的userFavorites(这里是afaapy…),并返回按值(时间戳)排序的结果,以便按照添加到数据库的日期的顺序获得所有用户的收藏夹 我可以按如下键搜索,并检索给定用户的所有收藏夹:Firebase 按键搜索,按值排序,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,以下是我的Firebase数据示例: 我需要能够搜索给定用户的userFavorites(这里是afaapy…),并返回按值(时间戳)排序的结果,以便按照添加到数据库的日期的顺序获得所有用户的收藏夹 我可以按如下键搜索,并检索给定用户的所有收藏夹: databaseRef.child("userFavorites").queryOrderedByKey().queryEqual(toValue: user.uid).observe(...) 但这些优惠是按钥匙排列的。如果我尝试按如下值排序,
databaseRef.child("userFavorites").queryOrderedByKey().queryEqual(toValue: user.uid).observe(...)
但这些优惠是按钥匙排列的。如果我尝试按如下值排序,我会得到“不能使用多个QueryOrderBy调用!”:
如何检索按其值排序的给定用户的收藏夹
第二个问题:是否有一种更简单的方法可以按数据添加到数据库的顺序检索数据?您不能按文档中的顺序多次检索同一个引用 当您使用
order
或filter
方法时,它会返回一个值。将其视为仅包含原始数据子集的筛选引用。意思是
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的快照。forEach
以确保按查询顺序获取数据):
databaseRef.child(`userFavorites/${user.uid}`).orderByValue().once('value',(快照)=>{
if(snapshot.exists()){
snapshot.forEach((子项)=>{
console.log(`${child.key}:${child.val()}`)
})
}
})
您不能多次订购同一个参考号
当您使用order
或filter
方法时,它会返回一个值。将其视为仅包含原始数据子集的筛选引用。意思是
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的快照。forEach
以确保按查询顺序获取数据):
databaseRef.child(`userFavorites/${user.uid}`).orderByValue().once('value',(快照)=>{
if(snapshot.exists()){
snapshot.forEach((子项)=>{
console.log(`${child.key}:${child.val()}`)
})
}
})
谢谢你的回答。现在我想起来很明显,我不知道为什么我一开始就不想使用child()。谢谢你的回答。现在我想起来很明显,我不知道为什么我一开始就不想使用child()。
databaseRef.child("userFavorites").queryOrderedByKey().queryEqual(toValue: user.uid).queryOrderedByValue().observe(...)