Firebase使用“引用”嵌套数据:true而不是数组

kirtan403

在Firebase结构数据部分中,它显示了如何在许多用户组情况下构造数据。但是,为什么他们在两侧都使用“ referece”:true而不是使用简单的数组od id。

就像,两种方式都可以使用它:

  1. 具有组数组的用户

    "groups" : [ "groupId1", "groupId2", ... ]
    
  2. 用户拥有

    "groups": {
        "groupId1" : true, 
        "groupId2" : true,
        ..
    }
    

他们做了第二种方式。是什么原因呢?

某些视频在Google I / O 2016上对此有所告知。但是,我不记得了。

数据结构示例:

// An index to track Ada's memberships
{
  "users": {
    "alovelace": {
      "name": "Ada Lovelace",
      // Index Ada's groups in her profile
      "groups": {
         // the value here doesn't matter, just that the key exists
         "techpioneers": true,
         "womentechmakers": true
      }
    },
    ...
  },
  "groups": {
    "techpioneers": {
      "name": "Historical Tech Pioneers",
      "members": {
        "alovelace": true,
        "ghopper": true,
        "eclarke": true
      }
    },
    ...
  }
}
弗兰克·范普菲伦

在大多数情况下,Firebase建议不要在其数据库中使用数组。在此不再重复原因,我将带您参考Firebase中有关数组的经典博客文章

让我们看一个可以从示例中轻松看到的简单原因。由于JavaScript中的Firebase数组只是具有连续整数键的关联对象,因此您的第一个示例存储为:

"groups" : { 
  0: "groupId1", 
  1: "groupId2"
]

要检测此用户是否在中groupId2,您必须扫描数组中的所有值。当只有两个值时,这可能还不错。但是随着您拥有更多的价值,它很快就会变慢。您也将无法查询或保护此数据,因为Firebase查询或其安全规则均不支持contains()运算符。

现在看一下替代数据结构:

"groups": {
    "groupId1" : true, 
    "groupId2" : true
}

在此结构中,您可以groupId2通过仅检查一个位置来查看用户是否在其中:/groups/groupId2如果密钥存在,则用户是的成员groupId2在这种情况下,实际值并不重要,我们仅将其true用作标记值(因为Firebase将在没有值的情况下删除路径)。

这也可以更好地与查询和安全规则一起使用,因为您现在“只是”需要一个exist()运算符。

要深入了解这种类型的建模,我强烈建议您参阅有关NoSQL数据建模的文章

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从 Firebase 读取嵌套数据返回的不是数组

来自分类Dev

Android Firebase:嵌套数组数据中的更新/添加记录

来自分类Dev

AngularJS在嵌套数组中插入数据并使用特定的嵌套数组对象进行排序

来自分类Dev

解析嵌套数组数据

来自分类Dev

使用 jQuery/JavaScript 在 Firebase 中嵌套数组

来自分类Dev

Firebase和使用Swift读取嵌套数据

来自分类Dev

使用 VUEX 将嵌套数据添加到 Firebase

来自分类Dev

如何从嵌套数组中提取JSON数据?使用Android

来自分类Dev

使用Go访问嵌套数组和对象中的数据

来自分类Dev

使用php从json中的嵌套数组获取数据

来自分类Dev

在 awk 中引用嵌套数组

来自分类Dev

数组值使用PHP嵌套数组

来自分类Dev

在firebase中查询嵌套数据

来自分类Dev

角度:将数据推入嵌套数组

来自分类Dev

MongoDB查询与elemMatch嵌套数组数据

来自分类Dev

从嵌套数组中获取数据

来自分类Dev

创建嵌套数据(JSON或数组)

来自分类Dev

嵌套数组未返回正确的数据

来自分类Dev

核心数据嵌套数组数

来自分类Dev

从嵌套数组获取json数据

来自分类Dev

搜索嵌套数组并显示数据

来自分类Dev

更改嵌套数组中的数据

来自分类Dev

Rails种子数据嵌套数组

来自分类Dev

Hive 从嵌套数组中提取数据

来自分类Dev

如何从嵌套数组中获取数据

来自分类Dev

从 JSON 数组对象获取嵌套数据

来自分类Dev

从嵌套数组聚合数据

来自分类Dev

从嵌套数组内部移动数据

来自分类Dev

RN/ Firestore - 如何使用 Firestore 引用对象填充嵌套数组