如何根据嵌套 child 中的键检索 firebase 数据?

How do I retrieve firebase data based on the key in a nested child?

假设我正在构建一个让用户管理行程的应用程序。创建行程后,可以在其中添加任意数量的用户。我希望将此数据存储在一个地方,然后每个用户都能够检索该人所在的行程。我的数据如下所示:

-trips
  -<trip-id>
    -title
    -budget
    -etc
    -people
     -<person-id>
       -name
       -uid
     -<person-id>
       -name
       -uid
  -<trip-id>
       -
       -
       -
        

此行程将包含所有用户创建的所有行程。为了向任何人显示他们的行程,我只想检索该人所在的列表。

这是我尝试做的,包括其他类似的方法。

rootReference.child("trips").orderByChild("uid").equalTo(FirebaseAuth.instance.currentUser.uid).addValueEventListener(object:ValueEventListener){
override fun onDataChange(snapshot: DataSnapshot) {
   //this should only return the trips that current user exists in.
 }

}

我已经查看了有关在 firebase 上进行搜索和过滤的文档,但没有任何内容显示基于过滤的嵌套键。一个具体的例子是 this。我完全理解。例如,如果我尝试根据标题、预算等主要属性过滤我的旅行,它会起作用,但当我使用嵌套 child.

的属性时则不起作用

我可以使用其他什么方法来根据嵌套键进行过滤,或者我应该以不同的方式构建数据?非常感谢任何帮助。

Firebase 实时数据库查询在您查询路径正下方的 child 个节点的平面列表上运行。

因此您 order/filter 的值必须位于每个直接 child 节点下的 fixex 路径中。由于您的 uid 并非如此,您无法在所有行程中查询这些行程的所有用户的 UID。

您可以在一次旅行中查询用户的 UID(然后取回该用户),或者您可以在所有旅行中查询旅行本身的属性,例如其标题或预算。

如果您想查询所有用户的所有行程,请考虑保留一个额外的列表,您将用户的 UID 作为键,然后将他们的所有行程放在该列表下:

"user_trips": {
  "uid1": {
    "tripid1": true,
    "tripid2": true
  },
  "uid2": {
    "tripid2": true,
    "tripid3": true
  }
}

另见: