Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to make a "like" query in Parse.com

For example, If my database is:

{
    people: name: [{"first":"Billy", "last":"smith"}]
},
{
    people: name: [{"first":"bob", "last":"smith"}]
},
{
    people: name: [{"first":"thor", "last":"smith"}]
},
{
    people: name: [{"first":"hobo", "last":"smith"}]
}

I would like something to the effect of: query.like("b") and have it return the first, second and fourth docs

Is there anything like this in the Javascript API?

like image 865
bzupnick Avatar asked Oct 08 '13 13:10

bzupnick


1 Answers

The contains(key, substring) method is the one you want, but note that this will only match on the second and fourth docs.

The reason is that searches are case-sensitive. A common tactic is to add a Cloud Code handler to write searchable content to another field before save, e.g.:

Parse.Cloud.beforeSave("people", function(request, response) {
    request.object.set(
        "search_name", 
        request.object.get("first").toLowerCase() 
            + " " 
            + request.object.get("last").toLowerCase()
    );
    response.success();
});

Now you can use query.contains("search_name", searchString.toLowerCase()) to find them all.

If you want to be able to search on just the first-name and not the last-name, either add another field ("search_first"), or just modify the above, depending on your needs.

like image 142
Timothy Walters Avatar answered Sep 19 '22 16:09

Timothy Walters