JSON模式下的Firebase实时数据库模型

JSON模式下的Firebase实时数据库模型,firebase,firebase-realtime-database,jsonschema,Firebase,Firebase Realtime Database,Jsonschema,Firebase数据库使用JSON的一个子集。因此,使用JSON模式来描述数据模型似乎是显而易见的。这将允许使用工具从中生成HTML表单或typescript模型,或生成随机测试数据 我的问题:在JSON模式中,如果键是一个id,一个模型的键值对会是怎样的 示例:(借用自) { “用户”:{ “麦辰”:{ “姓名”:“陈玛丽”, //在玛丽的个人资料中为她的小组编制索引 “团体”:{ //这里的值并不重要,只是键存在 “阿尔法”:对, “查理”:没错 } }, ... 此处的组名用作组id。在

Firebase数据库使用JSON的一个子集。因此,使用JSON模式来描述数据模型似乎是显而易见的。这将允许使用工具从中生成HTML表单或typescript模型,或生成随机测试数据

我的问题:在JSON模式中,如果键是一个id,一个模型的键值对会是怎样的

示例:(借用自)

{
“用户”:{
“麦辰”:{
“姓名”:“陈玛丽”,
//在玛丽的个人资料中为她的小组编制索引
“团体”:{
//这里的值并不重要,只是键存在
“阿尔法”:对,
“查理”:没错
}
},
...
此处的组名用作组id。在此引用(组对象)以及组对象本身中,id用作属性名

上述示例的JSON模式为:

{
“$schema”:”http://json-schema.org/draft-04/schema#",
“类型”:“对象”,
“财产”:{
“用户”:{
“类型”:“对象”,
“财产”:{
“麦辰”:{
“类型”:“对象”,
“财产”:{
“姓名”:{
“类型”:“字符串”
},
“团体”:{
“类型”:“对象”,
“财产”:{
“阿尔法”:{
“类型”:“布尔”
},
“查理”:{
“类型”:“布尔”
}
}
}
}
}
}
}
}
}
对于这个示例,我需要的是如下内容,其中
NAME
是属性名称的占位符,而
NAME\u TYPE
定义了它的类型

{
“$schema”:”http://json-schema.org/draft-04/schema#",
“类型”:“对象”,
“财产”:{
“用户”:{
“类型”:“对象”,
“财产”:{
姓名:{
“类型”:“对象”,
名称\u类型:“字符串”,
“财产”:{
“姓名”:{
“类型”:“字符串”
},
“团体”:{
“类型”:“对象”,
“财产”:{
姓名:{
名称\u类型:“字符串”
“类型”:“布尔”
}
}
}
}
}
}
}
}
}

(可能我在这里走的是完全错误的道路,或者JSON模式无法对所需的结构进行建模。)

Firebase中当然有数组,但它们是情境性的,应该仅在某些用例中使用,通常应该避免使用

您发布的Firebase结构非常常见,并且在您的结构中有键:值对,所以这个问题有点不清楚,但我来试一试

“groups”是父键,值是group1:value、group2:value的子键:值对

您列出的group1、group2键与第一个示例中列出的id基本相同,只是它不是数组。即,数组具有顺序的硬编码索引(第0、第1、第2等)尽管firebase中的键是开放式的,通常可以设置为任何字母数字值,但它们更多地用于指代特定节点,而不是强制执行特定顺序(我在这里一般说)

在Firebase结构中,这些密钥可以是id0、id1、id2…或a、b、c…或时间戳…或自动生成的Firebase id(childByAutoId),也可以使它们“连续”

但是,您可能会在分配自己的id0、id1等时遇到麻烦

id0
id1
id2
.
id9
id10
id11
这里的现实是,实际的秩序将是

id0
id1
id10
id11
id2

“KEY”是,如果您按顺序使用键来读取数据,则将其设置为这样。您可能还需要考虑用PythyAutoIE生成关键字(参见语言细节文档),并按子值之一(如时间戳或索引)排序。

'groups': {
  'auto-generated id': {
    'name': 'alpha',
    'index': 0,
    'timestamp': '20160814074146'
    ...
  },
  'auto-generated id': {
    'name': 'charlie',
    'index': 1,
    'timestamp': '20160814073600'
    ...
  },
  ...
}
在上述情况下,我可以按名称、索引或时间戳排序

Name和index将按照节点列出的顺序读取节点,如果我们按时间戳排序,则首先加载charlie节点。利用orderBy的子值非常灵活


此外,您还可以使用startingAt和endingAt限制加载的数据集。例如,您希望加载从节点10开始到节点14结束的节点。使用非数组JSON数据很容易完成,但如果它存储在数组中,则不容易完成,因为必须读入整个数组。

Firebase中肯定有数组,但它们是应仅在某些用例中使用情景和,通常应避免使用

您发布的Firebase结构非常常见,并且在您的结构中有键:值对,所以这个问题有点不清楚,但我来试一试

“groups”是父键,值是group1:value、group2:value的子键:值对

您列出的group1、group2键与第一个示例中列出的id基本相同,只是它不是数组。即,数组具有顺序的硬编码索引(第0、第1、第2等)尽管firebase中的键是开放式的,通常可以设置为任何字母数字值,但它们更多地用于指代特定节点,而不是强制执行特定顺序(我在这里一般说)

在Firebase结构中,这些密钥可以是id0、id1、id2…或a、b、c…或时间戳…或自动生成的Firebase id(childByAutoId),也可以使它们“连续”

但是,您可能会在分配自己的id0、id1等时遇到麻烦

id0
id1
id2
.
id9
id10
id11
这里的现实是,实际的秩序将是

id0
id1
id10
id11
id2

“KEY”是,如果您按顺序使用键来读取数据,则将其设置为这样。您可能还需要考虑用PythyAutoIE生成关键字(参见语言细节文档),并按子值之一(如时间戳或索引)排序。

'groups': {
  'auto-generated id': {
    'name': 'alpha',
    'index': 0,
    'timestamp': '20160814074146'
    ...
  },
  'auto-generated id': {
    'name': 'charlie',
    'index': 1,
    'timestamp': '20160814073600'
    ...
  },
  ...
}
在上述情况下,我可以按名称、索引或时间排序