使用数据列表进行Firebase搜索
假设我有一个要存储在Firebase实时数据库中的数据列表,并在以后进行搜索 存储和查询数据以获得最佳性能的最佳方法是什么 我的数据是一个名称列表(包含许多名称) [“鲍勃”,“罗伯”,…]使用数据列表进行Firebase搜索,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,假设我有一个要存储在Firebase实时数据库中的数据列表,并在以后进行搜索 存储和查询数据以获得最佳性能的最佳方法是什么 我的数据是一个名称列表(包含许多名称) [“鲍勃”,“罗伯”,…] 请注意,我有多个客户端在给定的时间内进行搜索。如果名称应该是唯一的,并且顺序无关紧要,那么您将希望将它们存储为一个数学集。在Firebase实时数据库中,您可以将其建模为: "usernames": { "Bob": true, "Rob": true } 关于此模型,请注意以下几点: 我们将这
请注意,我有多个客户端在给定的时间内进行搜索。如果名称应该是唯一的,并且顺序无关紧要,那么您将希望将它们存储为一个数学集。在Firebase实时数据库中,您可以将其建模为:
"usernames": {
"Bob": true,
"Rob": true
}
关于此模型,请注意以下几点:
- 我们将这些名称用作键,这意味着根据定义,每个名称都是唯一的(因为每个键在其包含节点中只能存在一次)
值没有特定含义。它们只是需要的,因为Firebase无法存储没有值的密钥true
- 某些字符(如
和
)不能在键中使用。如果名称包含此类字符,则必须在键中筛选(或编码)。例如,名为/
的人必须存储为Jes.sie
(有损)或例如Jes.sie
(使用URL编码)Jes%2Esie
- 在这种情况下,可以将原始的未过滤/未编码名称存储为值。所以:
“Jes%2Esie”:“Jes.sie”
- Firebase只能进行前缀匹配,它不支持搜索包含特定子字符串或以特定子字符串结尾的字符串。这意味着在原始数据中,它可以搜索以
开头的所有内容(使用B
),但不能搜索以orderByKey().startAt(“R”).endAt(“R\uF7FF”)
结尾的所有内容ob
- 搜索区分大小写。如果您希望能够搜索不区分大小写的文件,请考虑将密钥存储为所有小写:
"usernames": { "bob": "Bob", "rob": "Rob", "jes%2esie": "Jes.sie" }
- 这篇关于
- 视频系列
- (虽然为Firestore编写,但此处同样适用)
name
属性中),则可以使用orderByChild(“name”).startAt(“B”,“keyofobstatat”)
或orderByValue().startAt(“B”,“keyofobstat”)
,其中,keyofobostarat
是要返回的第一个匹配节点的键(必须以aB
开头)。