我正在考虑构建一个可以根据用户提供的标签获取数据的移动应用。
该应用程序是基于用户输入建议一些礼物。例如,用户选择标签:"男","生日"," 30"。 API应该能够提供符合此条件的项目列表。
Interceptor
我想出了这种带有firebase的结构,并使用orderByValue和OrderByKey进行游戏。
请建议一些订购我的数据的方法以及使用Firebase查询参数(RESTful)检索数据的方法。
答案 0 :(得分:2)
请避免使用数组。它们非常有限;无法访问单个元素,如果需要添加,编辑或删除数组中的任何内容,则必须更新和重写整个数组。见Arrays Are Evil.
回答这个问题;当你想要查询多个参数时,你需要
1) Nest your queries - can get quite complex
2) Filter in code - with a large dataset can be to much
3) Combine your parameters into a single child.
这是3)方式。假设您有一定数量的标签:
male
female
birthday
age
和结构
Gifts
gift_0
desc: "asdas"
name: "assad"
male: true
birthday: true
age: 30
query: male_birthday_30
gift_1
desc: "asdas"
name: "assad"
female: true
anniversary: true
age: 28
query: female_anniversary_28
gift_2
desc: "asdas"
name: "assad"
male: true
birthday: true
age: 35
query: male_birthday_35
通过这种结构,您可以轻松查询所有男性或女性的礼物,特定年龄或年龄之间或生日或周年纪念日的礼物。
查询子节点使您能够扩展它以查询male_birthday礼物或female_annivesary礼物,还可以捕获一系列年龄:(这里是一些伪代码)
query.startingAt("male_birthday_30").endingAt("male_birthday_35")
您可以通过一点交叉引用进一步扩展。让我们定义一些变量来代表不同的事件组合......
combo0 = birthday
combo1 = birthday and anniversary
combo2 = birthday and anniversary and graduation
然后礼物节点看起来像这样
gift_0
desc: "asdas"
name: "assad"
male: true
birthday: true
anniversary: true
age: 30
query: male_combo1_30
和查询
query.startingAt("male_combo1_30").endingAt("male_combo1_35")
将返回适合30至35岁生日和周年纪念的男性礼物。
使用该技术,您可以进行一些错误复杂的查询。