灵活引用其他记录的Firebase记录

灵活引用其他记录的Firebase记录,firebase,Firebase,我想创建firebase集合,其中的记录可以灵活地相互引用。更具体地说,我希望文档能够跨集合引用多个文档 下面是一个虚构的例子: 有一组具有不同字段的人员,其属性存储在文档中(例如,{姓名:Mary,性别:女性,年龄:23},{姓名:Jim,性别:男性,年龄:27},等等) 2) 还有第二个收藏音乐俱乐部,存储不同领域的财产(例如,{名称:爵士俱乐部,地址:27 oak lane,成员人数:23},{名称:死亡金属,地址:112 ruby road,成员人数:52}) 我想把人们和俱乐部联系起来

我想创建firebase集合,其中的记录可以灵活地相互引用。更具体地说,我希望文档能够跨集合引用多个文档

下面是一个虚构的例子:

  • 有一组具有不同字段的人员,其属性存储在文档中(例如,{姓名:Mary,性别:女性,年龄:23},{姓名:Jim,性别:男性,年龄:27},等等)
  • 2) 还有第二个收藏音乐俱乐部,存储不同领域的财产(例如,{名称:爵士俱乐部,地址:27 oak lane,成员人数:23},{名称:死亡金属,地址:112 ruby road,成员人数:52})

    我想把人们和俱乐部联系起来。玛丽精通爵士乐和金属音乐。吉姆只是爵士乐的一员

    人们会如何建议我与俱乐部的人们建立联系?我能想到的两种方法是将列表存储在人员或俱乐部文档中。因此,“玛丽”文档将包含一个(俱乐部)firebase文档列表,其中引用了她所属的俱乐部(爵士和金属)。或者,俱乐部会有一份所有会员的firebase文件参考清单。因此,爵士乐俱乐部的文件将有一个列表的firebase文件参考玛丽和吉姆

    我的理解是firebase不能很好地处理列表。那么如何解决这个问题呢


    谢谢

    选项1:

    在特定俱乐部的文档中存储属于特定俱乐部成员的用户UID,如:

    {
      "clubID": "123",
      "name": "Music",
      "members": ["uid1", "uid2", "uid3"]
    }
    
    {
      "userUID": "y123",
      "name": "TestUser",
      "clubs": ["clubID1", "clubID2"]
    }
    
    要获取特定用户的俱乐部列表,请执行以下操作:

    const userClubs = clubsRef.where('members', 'array-contains', 'userUID').get();
    
    选项2:

    在每个用户的文档中存储俱乐部ID,如:

    {
      "clubID": "123",
      "name": "Music",
      "members": ["uid1", "uid2", "uid3"]
    }
    
    {
      "userUID": "y123",
      "name": "TestUser",
      "clubs": ["clubID1", "clubID2"]
    }
    
    通过这种方式,您可以了解特定用户的所有俱乐部。但要获取特定俱乐部中所有用户的列表,请使用与选项1相同的逻辑

    const clubMembers = usersRef.where('clubs', 'array-contains', 'clubID').get();
    

    虽然这可能是一个问题,如果您的会员可以加入数千个俱乐部,因为Firestore文档最多可以包含1MB的数据。在这种情况下,我只需要创建一个包含成员文档(每个成员文档存储userID、clubID和任何元数据)的新集合,这样我就可以使用这些字段中的任何一个进行查询。

    您尝试了什么?这并不是说你的问题不好(实际上很有趣),但堆栈溢出不是一个“为我编写代码”的地方。请展示您尝试过的内容。
    谢谢。我想在我闯入一个角落之前,我应该在抽象中问这个问题。谢谢!这就是我所想的,但我不知道我搜索了数组,这使它非常有用@TomCarlson如果答案有帮助,您可以通过单击勾选图标接受答案,以便其他人知道答案:)