Firebase字符串在字段结尾处匹配

时间:2018-06-27 01:06:39

标签: javascript firebase firebase-realtime-database

想象以下数据:

{
  "name": "Abcdef",
  "age": 21
},
{
  "name": "Rodrigo",
  "age": 24
},
{
  "name": "Matt",
  "age": 30
},
{
  "name": "Def",
  "age": 21
}

如何使此搜索等效:

SELECT * FROM table WHERE name = "%def"

这样我就得到了这个结果:

{
  "name": "Abcdef",
  "age": 21
},
{
  "name": "Def",
  "age": 21
},

(或至少第一个结果,因为其%def) 我已经尝试过startAtendAt,还使用了"\uf8ff",但似乎没有任何效果....

这应该是解决方案:

ref.orderByChild("name").endAt("def"+"\uf8ff").once('value'....

含义:它以'def'结尾,但是不起作用。...

(我正在使用Javascript SDK)

(注意:我的问题不是大写D,它的字符串匹配)

1 个答案:

答案 0 :(得分:0)

您正在调用的方法称为endAt(),但是您正在尝试将其用作endsWith()。这是另一种类型的操作,Firebase不支持。

Firebase数据库查询只能进行前缀匹配:查找以某个子字符串开头的字符串。没有用于后缀匹配的操作,也没有用于查找包含特定值的字符串的操作。

如果您的用例确实是一个后缀匹配项,则通常的解决方法是添加一个包含反向字符串的属性,并对此进行startAt().endAt()

所以:

{
  "name": "Abcdef",
  "name_reverse": "fedcbA",
  "age": 21
},
{
  "name": "Def",
  "name_reverse": "feD",
  "age": 21
},

然后:

ref.orderByChild("name_reverse").startAt("fed").endAt("fed\uf8ff")