首页 > 解决方案 > 字段末尾的 Firebase 字符串匹配

问题描述

想象以下数据:

{
  "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,而是字符串匹配)

标签: javascriptfirebasefirebase-realtime-database

解决方案


您正在调用的方法被调用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")

推荐阅读