想象以下数据:
{
"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)
我已经尝试过startAt
和endAt
,还使用了"\uf8ff"
,但似乎没有任何效果....
这应该是解决方案:
ref.orderByChild("name").endAt("def"+"\uf8ff").once('value'....
含义:它以'def'结尾,但是不起作用。...
(我正在使用Javascript SDK)
(注意:我的问题不是大写D,它的字符串匹配)
答案 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")