Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 按键搜索,按值排序_Firebase_Firebase Realtime Database - Fatal编程技术网

Firebase 按键搜索,按值排序

Firebase 按键搜索,按值排序,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,以下是我的Firebase数据示例: 我需要能够搜索给定用户的userFavorites(这里是afaapy…),并返回按值(时间戳)排序的结果,以便按照添加到数据库的日期的顺序获得所有用户的收藏夹 我可以按如下键搜索,并检索给定用户的所有收藏夹: databaseRef.child("userFavorites").queryOrderedByKey().queryEqual(toValue: user.uid).observe(...) 但这些优惠是按钥匙排列的。如果我尝试按如下值排序,

以下是我的Firebase数据示例:

我需要能够搜索给定用户的userFavorites(这里是afaapy…),并返回按值(时间戳)排序的结果,以便按照添加到数据库的日期的顺序获得所有用户的收藏夹

我可以按如下键搜索,并检索给定用户的所有收藏夹:

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(...)