Firebase query results are mistaken









up vote
1
down vote

favorite












This is my database design.



foodie-ab2b4
Foods
0
FoodName: "Baked Beans In Tomato Sauce"
FoodRecipe:
FoodUri:
Image:

1
FoodName: "Another bean




I'm working on an ios project and this is how my firebase json structured.



let ref = Database.database().reference()
func searchFoodByName(FoodName: String)
let foodsRef = ref.child("Foods")

let input = FoodName
let query = foodsRef.child(key).queryOrdered(byChild: "FoodName").queryEnding(atValue: input)
query.observeSingleEvent(of: .value, with: snapshot in
print(snapshot)
for child in snapshot.children
let snap = child as! DataSnapshot
let dict = snap.value as! [String: Any]
let fName = dict["FoodName"] as! String
let fIngredients = dict["Ingredients"] as! [String]
print(fName)
print(fIngredients)

let key = snapshot.key
print(key)

)



I'm trying to filter my food objects by their names. I have 10 objects in my database. In most cases this search return true objects. But there is one example i can not solve.



When i query the "tomato" word i need to get 1 object. But there is two. Although there is no tomato word in my second object.



The two object is in my json file.



If it is necessary i can upload my whole JSON file to here.










share|improve this question























  • What is the value of key?
    – Frank van Puffelen
    Nov 10 at 17:47














up vote
1
down vote

favorite












This is my database design.



foodie-ab2b4
Foods
0
FoodName: "Baked Beans In Tomato Sauce"
FoodRecipe:
FoodUri:
Image:

1
FoodName: "Another bean




I'm working on an ios project and this is how my firebase json structured.



let ref = Database.database().reference()
func searchFoodByName(FoodName: String)
let foodsRef = ref.child("Foods")

let input = FoodName
let query = foodsRef.child(key).queryOrdered(byChild: "FoodName").queryEnding(atValue: input)
query.observeSingleEvent(of: .value, with: snapshot in
print(snapshot)
for child in snapshot.children
let snap = child as! DataSnapshot
let dict = snap.value as! [String: Any]
let fName = dict["FoodName"] as! String
let fIngredients = dict["Ingredients"] as! [String]
print(fName)
print(fIngredients)

let key = snapshot.key
print(key)

)



I'm trying to filter my food objects by their names. I have 10 objects in my database. In most cases this search return true objects. But there is one example i can not solve.



When i query the "tomato" word i need to get 1 object. But there is two. Although there is no tomato word in my second object.



The two object is in my json file.



If it is necessary i can upload my whole JSON file to here.










share|improve this question























  • What is the value of key?
    – Frank van Puffelen
    Nov 10 at 17:47












up vote
1
down vote

favorite









up vote
1
down vote

favorite











This is my database design.



foodie-ab2b4
Foods
0
FoodName: "Baked Beans In Tomato Sauce"
FoodRecipe:
FoodUri:
Image:

1
FoodName: "Another bean




I'm working on an ios project and this is how my firebase json structured.



let ref = Database.database().reference()
func searchFoodByName(FoodName: String)
let foodsRef = ref.child("Foods")

let input = FoodName
let query = foodsRef.child(key).queryOrdered(byChild: "FoodName").queryEnding(atValue: input)
query.observeSingleEvent(of: .value, with: snapshot in
print(snapshot)
for child in snapshot.children
let snap = child as! DataSnapshot
let dict = snap.value as! [String: Any]
let fName = dict["FoodName"] as! String
let fIngredients = dict["Ingredients"] as! [String]
print(fName)
print(fIngredients)

let key = snapshot.key
print(key)

)



I'm trying to filter my food objects by their names. I have 10 objects in my database. In most cases this search return true objects. But there is one example i can not solve.



When i query the "tomato" word i need to get 1 object. But there is two. Although there is no tomato word in my second object.



The two object is in my json file.



If it is necessary i can upload my whole JSON file to here.










share|improve this question















This is my database design.



foodie-ab2b4
Foods
0
FoodName: "Baked Beans In Tomato Sauce"
FoodRecipe:
FoodUri:
Image:

1
FoodName: "Another bean




I'm working on an ios project and this is how my firebase json structured.



let ref = Database.database().reference()
func searchFoodByName(FoodName: String)
let foodsRef = ref.child("Foods")

let input = FoodName
let query = foodsRef.child(key).queryOrdered(byChild: "FoodName").queryEnding(atValue: input)
query.observeSingleEvent(of: .value, with: snapshot in
print(snapshot)
for child in snapshot.children
let snap = child as! DataSnapshot
let dict = snap.value as! [String: Any]
let fName = dict["FoodName"] as! String
let fIngredients = dict["Ingredients"] as! [String]
print(fName)
print(fIngredients)

let key = snapshot.key
print(key)

)



I'm trying to filter my food objects by their names. I have 10 objects in my database. In most cases this search return true objects. But there is one example i can not solve.



When i query the "tomato" word i need to get 1 object. But there is two. Although there is no tomato word in my second object.



The two object is in my json file.



If it is necessary i can upload my whole JSON file to here.







ios swift firebase firebase-realtime-database






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 10 at 17:46









Frank van Puffelen

219k25361387




219k25361387










asked Nov 10 at 15:46









Asgencer

62




62











  • What is the value of key?
    – Frank van Puffelen
    Nov 10 at 17:47
















  • What is the value of key?
    – Frank van Puffelen
    Nov 10 at 17:47















What is the value of key?
– Frank van Puffelen
Nov 10 at 17:47




What is the value of key?
– Frank van Puffelen
Nov 10 at 17:47












1 Answer
1






active

oldest

votes

















up vote
0
down vote













You seem to assume that Firebase can filter based on strings that contain a value, but it can't. See Firebase query - Find item with child that contains string (and the many links from there).



What Firebase can do is search for string values that start with a certain value. You do that by using a combination of queyStarting(atValue:) and queryEnding(atValue:):



let query = foodsRef
.queryOrdered(byChild: "FoodName")
.queryStarting(atValue: input)
.queryEnding(atValue: input+"\uf8ff")


If you use this query, and input is ``Baked`, it will only match the first food from your JSON.






share|improve this answer




















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













     

    draft saved


    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53240586%2ffirebase-query-results-are-mistaken%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    0
    down vote













    You seem to assume that Firebase can filter based on strings that contain a value, but it can't. See Firebase query - Find item with child that contains string (and the many links from there).



    What Firebase can do is search for string values that start with a certain value. You do that by using a combination of queyStarting(atValue:) and queryEnding(atValue:):



    let query = foodsRef
    .queryOrdered(byChild: "FoodName")
    .queryStarting(atValue: input)
    .queryEnding(atValue: input+"\uf8ff")


    If you use this query, and input is ``Baked`, it will only match the first food from your JSON.






    share|improve this answer
























      up vote
      0
      down vote













      You seem to assume that Firebase can filter based on strings that contain a value, but it can't. See Firebase query - Find item with child that contains string (and the many links from there).



      What Firebase can do is search for string values that start with a certain value. You do that by using a combination of queyStarting(atValue:) and queryEnding(atValue:):



      let query = foodsRef
      .queryOrdered(byChild: "FoodName")
      .queryStarting(atValue: input)
      .queryEnding(atValue: input+"\uf8ff")


      If you use this query, and input is ``Baked`, it will only match the first food from your JSON.






      share|improve this answer






















        up vote
        0
        down vote










        up vote
        0
        down vote









        You seem to assume that Firebase can filter based on strings that contain a value, but it can't. See Firebase query - Find item with child that contains string (and the many links from there).



        What Firebase can do is search for string values that start with a certain value. You do that by using a combination of queyStarting(atValue:) and queryEnding(atValue:):



        let query = foodsRef
        .queryOrdered(byChild: "FoodName")
        .queryStarting(atValue: input)
        .queryEnding(atValue: input+"\uf8ff")


        If you use this query, and input is ``Baked`, it will only match the first food from your JSON.






        share|improve this answer












        You seem to assume that Firebase can filter based on strings that contain a value, but it can't. See Firebase query - Find item with child that contains string (and the many links from there).



        What Firebase can do is search for string values that start with a certain value. You do that by using a combination of queyStarting(atValue:) and queryEnding(atValue:):



        let query = foodsRef
        .queryOrdered(byChild: "FoodName")
        .queryStarting(atValue: input)
        .queryEnding(atValue: input+"\uf8ff")


        If you use this query, and input is ``Baked`, it will only match the first food from your JSON.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 10 at 17:54









        Frank van Puffelen

        219k25361387




        219k25361387



























             

            draft saved


            draft discarded















































             


            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53240586%2ffirebase-query-results-are-mistaken%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Top Tejano songwriter Luis Silva dead of heart attack at 64

            政党

            天津地下鉄3号線