按键搜索,按值排序

时间:2018-03-07 15:15:30

标签: firebase firebase-realtime-database

以下是我的Firebase数据示例:

data

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

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

databaseRef.child("userFavorites").queryOrderedByKey().queryEqual(toValue: user.uid).observe(...)

但这些好处是按他们的钥匙排序的。如果我按照以下方式尝试按值排序,我得到"不能使用多个queryOrderedBy调用!":

databaseRef.child("userFavorites").queryOrderedByKey().queryEqual(toValue: user.uid).queryOrderedByValue().observe(...)

如何检索按其值排序的给定用户的收藏夹?

第二个问题:是否有更简单的方法按照添加到数据库的顺序检索数据?

1 个答案:

答案 0 :(得分:2)

您无法按照文档here

多次订购相同的参考号

当您使用orderfilter方法时,它会返回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()}`)
        })
      }
    })