2 回答
TA贡献1825条经验 获得超6个赞
在 couchbase lite 上工作和研究了几个小时后,我得到了这个。首先,正则表达式查询没有任何问题,它工作正常。
第二个是在检查我的数据库时,我意识到我正在查询数据的信息字段在某些数据库条目中是 EMPTY 或 NULL。所以我在查询中添加了一个条件,例如,
Expression.property("info").notNullOrMissing()
因此,当信息可用时,我正在执行我的正则表达式查询,
.where(Expression.property("info").notNullOrMissing().and(Expression.property("info").regex(Expression.string("^v" + "_" + "(4.6.2|1.7.7)" + "_" + "[123]" + "_" + "[12345678]"))))
它运行良好,没有任何致命的信号错误或任何东西。
注意: -另一件事是我的数据库中的信息字段被定义为索引,所以也许我正在查询索引字段上的数据并且它变得空或为空,这就是我收到致命信号错误的原因(我仍在搜索,是这个逻辑正确与否。)
TA贡献1826条经验 获得超6个赞
我认为,您的正则表达式查询似乎很好。您可以使用以下单元测试用例进行验证。
@Test
public void testRegex() throws Exception {
MutableDocument doc1 = new MutableDocument("doc1");
doc1.setValue("version", "v_1.7.7_1_3");
db.save(doc1);
MutableDocument doc2 = new MutableDocument("doc2");
doc2.setValue("version", "v_1.7.5_1_3");
db.save(doc2);
MutableDocument doc3 = new MutableDocument("doc3");
doc3.setValue("version", "v_4.7.1_2_8");
db.save(doc3);
MutableDocument doc4 = new MutableDocument("doc4");
doc4.setValue("version", "v_4.7.1_1_8");
db.save(doc4);
MutableDocument doc5 = new MutableDocument("doc5");
doc5.setValue("version", "v_4.7.2_2_8");
db.save(doc5);
MutableDocument doc6 = new MutableDocument("doc6");
doc6.setValue("version", "v_4.6.2_2_8");
db.save(doc6);
Query q = QueryBuilder
.select(SelectResult.property("version"))
.from(DataSource.database(db))
.where(Expression.property("version").regex(Expression.string("^v" + "_" + "(4.6.2|1.7.7)" + "_" + "[123]" + "_" + "[12345678]")));
List<Result> results = q.execute().allResults();
// since the doc1 and doc6 passes the regex.
assertEquals(results.size(), 2);
}
添加回答
举报