这段代码工作正常。
我想要的唯一改进是 -当我传递“ Pi”时,它将获取所有以“ Pi”名称开头的项目对象,但是当我输入“ pi”时,它什么也不返回!
这意味着我希望此方法startAt(itemName)不区分大小写。因此,在那种情况下,“ Pi”或“ pi”等任何东西(小写或大写)都可以使用。
startAt(itemName)
//5. Get menu items from RestaurantMenu this.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"); } }); }
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"); } });
这确实需要复制数据,但是到目前为止,还没有一个更容易预见的选项。