2012-07-27 68 views
2

我尝试使用正则表达式,并没有返回任何结果:如何查询ScriptDb的部分匹配?

function findRecord() { 
    var db = ScriptDb.getMyDb(); 
    var toFind = /Quality/i; 
    var results = db.query({companyName: toFind}); 
    while (results.hasNext()) { 
    var result = results.next(); 
    Logger.log(Utilities.jsonStringify(result)); 
    } 
} 

从我所看到的,ScriptDb中的查询()将只精确返回的字符串相匹配。

我能看到的唯一方法是返回整个数据库,然后遍历它。我真的希望有一种方法来查询部分匹配。

回答

1

ScriptDb当前不支持字符串中的部分匹配。根据数据你可以使用anyOf方法:

var results = db.query({ 
    companyName: db.anyOf(['Quality', 'quality']) 
}); 
+0

谢谢@eric。需要在公司名称中搜索“质量”,并返回“质量Rancid肉类”,“优质擦鞋”等。 – Weehooey 2012-07-31 00:03:58

0

我不认为这是可能的。您可以在issue tracker上打开“增强请求”。

但是,根据您的使用情况,如果您对数据库进行了不同的结构化,可能会为您的对象创建某种“标签”类别属性,即事先设置的对象数据库,所以你可以稍后查询它。

+0

感谢您的回复遍历结果。我所考虑的部分匹配类型是针对公司名称 - 这不是用部分匹配轻松复制的功能。 – Weehooey 2012-07-28 17:51:24

2

尝试使用匹配方法

function testQuery() {  
    var db = ScriptDb.getMyDb(); 
    var results = db.query({}); 
    var start = new Date(); 
    while (results.hasNext()) { 
    var result = results.next(); 
    if (result.companyName.match(/qual.*/i)){ 
    Logger.log(Utilities.jsonStringify(result)); 
    } 
    } 
    var endTime = new Date(); 
    Logger.log("time is " + (endTime.getTime() - start.getTime()) + "ms"); 
}