17

This code is working fine.

The only improvement I want is - when I pass "Pi", it fetch all the items object that begin with the name "Pi", but when I enter "pi" it returns nothing!

This means I want this method startAt(itemName) to be worked case insensitive. So that should works with anything (lowercase or uppercase) in that case "Pi" or "pi" etc..

//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");
    }
  });
}
shkschneider
  • 17,833
  • 13
  • 59
  • 112
Ankit Maheshwari
  • 1,620
  • 6
  • 28
  • 55

1 Answers1

18

There is currently no support for lowercase searches in Firebase. The best way to handle this would be store the lowercase string along side the original string and then query the lowercase string instead.

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(),
    ...
})

Then you could query as so:

//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");
    }
});

This does require replicating the data, but as of now there is not an easier foreseeable option.

Reference: Firebase Google Forum

theblindprophet
  • 7,767
  • 5
  • 37
  • 55