使用javascript从Parse搜索不区分大小写的数据

时间:2013-09-12 11:22:51

标签: javascript parse-platform

我正在使用Parse.com并使用Javascript访问它。我希望以这样一种方式搜索数据:它不会搜索区分大小写,如果我搜索abc,那么它将提供abc, Abc, ABC,aBc etc all。但目前只提供abc

JavaScript的:

var search_data="Temp";
var product = Parse.Object.extend("product");
var query = new Parse.Query(product);

query.contains("name",search_data); 
query.find({
     success: function(results) {
        console.log("Total Product Found : "+results.length);
        printSearchProducts(results,query);  //custom method to print product detail
     },
     error: function(error) {
         console.log("Error: " + error.code + " " + error.message);
     }
 });

实际结果: Temp1,Temp2,Temp3,ProductTemp3,Temp4Product etc

必填结果: Temp1,Temp2,Temp3,ProductTemp3,Temp4Product,temp5,producttemp6,TEMP7,tEMp8 etc

4 个答案:

答案 0 :(得分:27)

为此你可以使用Parse.Query's matches()功能,即使它在文档页面中没有显示,但你可以像这样使用它:

query.matches(key, value, 'i');

希望可以提供帮助。

答案 1 :(得分:5)

此时您无法通过查询执行不区分大小写的搜索。

然而,一个非常简单的解决方法是存储您需要执行此查询的字段的小写版本。

创建项目

var Product = Parse.Object.extend("product");
var newProduct = new Product();
var productName = "Temp4Product";
newProduct.set("name",productName);
newProduct.set("name_lowercase",productName.toLowerCase());
newProduct.save(); 

执行查询

var search_data="Temp";
var product = Parse.Object.extend("product");
var query = new Parse.Query(product);

query.contains("name_lowercase",search_data.toLowerCase()); 
query.find({
     success: function(results) {
        console.log("Total Product Found : "+results.length);
        printSearchProducts(results,query);  //custom method to print product detail
     },
     error: function(error) {
         console.log("Error: " + error.code + " " + error.message);
     }
 });

请注意,在上面的示例中,我使用了string.toLowerCase()函数,但是可能有更合适的函数供您使用。基本上,您希望找到一种“简化”数据的方法,以便您可以执行适当的查询。

答案 2 :(得分:1)

我已经解决了这个问题。 我删除约束query.contains("name",search_data);并在printSearchProducts方法中使用java脚本应用手动搜索,如:

var search_data="Temp";
var product = Parse.Object.extend("product");
var query = new Parse.Query(product);
query.limit(500);
query.find({
    success: function(results) {
         printSearchProducts(results,query,search_data); 
    }, 
    error: function(error) {
         console.log("Error: " + error.code + " " + error.message);
   } 
});

printSearchProducts方法通过Java Script手动搜索。

function printSearchProducts(results,query,search_data) {
    var counter = results.length; 
    var productName = '',i=0; 
    search_data = search_data.toLowerCase(); 
    if(counter){
        while(i<counter){
            var found = -1;
            productName = results[i].get("name");
            var lower_name = productName.replace(/[^a-zA-Z]/g,'_').toLowerCase();
            found = lower_name.indexOf(search_data);
            if(found>=0) {
                  //Access or print the required result here 
            } 
            i++;
        }
    }  
}

答案 3 :(得分:0)

建议使用小写值的额外存储字段的解决方案具有需要额外存储的缺点。 matches 方法有效,但性能成本较低。

避免这两个问题的更好的解决方法是在投影中使用带有 $ toLower 表达式的聚合。