为了账号安全,请及时绑定邮箱和手机立即绑定

firebase查询方法startAt()采用区分大小写的参数

firebase查询方法startAt()采用区分大小写的参数

拉风的咖菲猫 2019-12-05 14:38:10
这段代码工作正常。我想要的唯一改进是 -当我传递“ Pi”时,它将获取所有以“ Pi”名称开头的项目对象,但是当我输入“ pi”时,它什么也不返回!这意味着我希望此方法startAt(itemName)不区分大小写。因此,在那种情况下,“ Pi”或“ pi”等任何东西(小写或大写)都可以使用。//5. Get menu items from RestaurantMenuthis.getMenuItemFromRestaurantMenu = function(callback, itemName) {  var ref_restMenu = firebase.database().ref()  .child('Restaurants')  .child('Company')  .child('menu');  //Check if item is already exist!  ref_restMenu.orderByChild("itemName").startAt(itemName).once("value", function(snapshot) {    var data = snapshot.val();     if(data !== null) {      //We will ger item name and restaurant id from this data.      callback(data);    } else {      //Item not found in globalMenu      console.log("%c Item not found in Global Menu", "color: red");    }  });}
查看完整描述

1 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

Firebase当前不支持小写搜索。处理此问题的最佳方法是将小写字符串与原始字符串一起存储,然后查询小写字符串。


var ref_restMenu = firebase.database().ref()

    .child('Restaurants')

    .child('Company')

    .child('menu');

var item = "Apple Pie";

// Or however you store data

ref.push({

    itemName: item,

    itemNameLower: item.toLowerCase(),

    ...

})

然后您可以这样查询:


//Check if item is already exist!

// query itemNameLoweruse and .toLowerCase()

ref_restMenu.orderByChild("itemNameLower").startAt(itemName.toLowerCase()).once("value", function(snapshot) {

    var data = snapshot.val(); 

    if(data !== null) {

        //We will ger item name and restaurant id from this data.

        callback(data);

    } else {

        //Item not found in globalMenu

        console.log("%c Item not found in Global Menu", "color: red");

    }

});

这确实需要复制数据,但是到目前为止,还没有一个更容易预见的选项。


查看完整回答
反对 回复 2019-12-05
  • 1 回答
  • 0 关注
  • 251 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信