Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Firebase按键排序,带数字字符串键_Node.js_Firebase_Firebase Realtime Database - Fatal编程技术网

Node.js Firebase按键排序,带数字字符串键

Node.js Firebase按键排序,带数字字符串键,node.js,firebase,firebase-realtime-database,Node.js,Firebase,Firebase Realtime Database,我看到实时数据库键必须是字符串。 我想使用数字作为键,并在开始和结束时提取数据块,例如 admin.database().ref('PARENT').orderByKey().startAt('107').endAt('1032').once('value'); 这是否可以按数字顺序执行,例如107108109110111112。。。或者它将以字符串顺序返回,例如1,11111,2,22222 谢谢Firebase实时数据库键是字符串,应始终按字符串处理 这种情况的例外情况发生在获取包含子节点

我看到实时数据库键必须是字符串。 我想使用数字作为键,并在开始和结束时提取数据块,例如

admin.database().ref('PARENT').orderByKey().startAt('107').endAt('1032').once('value');
这是否可以按数字顺序执行,例如107108109110111112。。。或者它将以字符串顺序返回,例如1,11111,2,22222


谢谢

Firebase实时数据库键是字符串,应始终按字符串处理

这种情况的例外情况发生在获取包含子节点的父节点时,这些子节点看起来大多像序列号。在这种情况下,客户机将收到一个结果列表或数组,其中字符串键实际上成为数组中的数字索引。然而,通常是这样处理数据列表的(我强烈建议阅读链接的博客文章)。特别是,本部分:

如果所有键都是整数,并且对象中0和最大键之间的键有一半以上具有非空值,则Firebase将将其渲染为数组


键是按字典顺序返回的,因此您将得到1,11111,2,22222

如果要按数字顺序获取它们,请使用按数字顺序排序的键,方法是在开始处填充0:

{
  "001": { ... },
  "002": { ... },
  "011": { ... },
  "022": { ... },
  "111": { ... },
  "222": { ... }
}
应选择您使用的字符数,以允许您希望支持的最大数值。在上面的示例中,最大值为999,但您可能有不同的要求,因此选择不同数量的字符


然后,您还可以使用一个短的非数字字符串作为键的前缀,以确保您永远不会遇到Doug在回答中提到的数组强制:

{
  "key001": { ... },
  "key002": { ... },
  "key011": { ... },
  "key022": { ... },
  "key111": { ... },
  "key222": { ... }
}

请限制你自己在每篇关于堆栈溢出的文章中只回答一个问题。这里有两个不同的问题,所以它们应该是两个不同的帖子。我回答了您的第一个问题,因此请编辑该问题以删除它并单独提问。没问题,我添加了另一个问题。是否最好使用push()方法并为每个子项添加计数属性(number)。然后执行orderByChild('count')并向count属性添加索引?这仍然会提供一致的顺序吗?是的,通常最好使用push(),但还应确保包含一个子值,该值可用于根据需要对子项进行排序。您可以使用该数字子值来获取数字排序。我是否能够对children count属性执行startAt EndAt类型查询?或者只能在键()上执行此操作。。。(这对我的特写很重要)我不知道你在问什么。试一试,然后发布一个新的问题和代码,这些问题并没有按照您期望的方式工作。好吧,弗兰克,第一个例子似乎是一个很好的解决方案。使用padding方法加上7个字符,例如0000001,或者使用我想到的索引方法(对dougs的答案进行了评论)会更好吗。。。我可以看到您的主要好处是在键中发送更少的数据,因为push()将包含更多的数据。