如何找回对其有特殊价值的孩子?

时间:2017-03-29 23:49:16

标签: json firebase firebase-realtime-database

我正在考虑构建一个可以根据用户提供的标签获取数据的移动应用。

该应用程序是基于用户输入建议一些礼物。例如,用户选择标签:"男","生日"," 30"。 API应该能够提供符合此条件的项目列表。

Interceptor

我想出了这种带有firebase的结构,并使用orderByValue和OrderByKey进行游戏。

请建议一些订购我的数据的方法以及使用Firebase查询参数(RESTful)检索数据的方法。

1 个答案:

答案 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岁生日和周年纪念的男性礼物。

使用该技术,您可以进行一些错误复杂的查询。