在 cloudant DB (Android) 中按特定 ID (regex) 搜索



我正在构建一个Android应用程序,该应用程序在sqlite数据库中内部存储数据。我们在代码中使用了 Cloudant 库。

我的数据库中有不同类型的数据 - 所有数据都有不同的 ID。例如:GUID 可以有以 A、B、C、D 开头的数据。这意味着我们可以拥有 GUID,如 A_、B_ 等。

现在,我想获取 GUID 以 A_开头的所有数据库条目,并将它们本地存储在应用程序本身中以供进一步处理。但是,我只看到一个从数据库中获取所有 ID 的函数。 所以,我正在做的是这样的:

List<String> allID = db.getIds();
for (int i=0;i<allID.size();i++)
{
String guid = allID.get(i);
if (guid.startsWith("A_"))
{
//store and process this guid.
}
}

变量 db 是 cloudant 库中类 DatabaseImpl.java 的对象。

这绝对是件好事,因为我们只获取和处理我们需要的数据库条目。但是,我不喜欢这种方法的是,我们实际上是在数据库中获取所有 GUID,然后检查它们中的每一个。

我希望我们能有一个函数,允许我们通过正则表达式搜索 ID。前任: 像这样的东西——

List<String> aID = db.getIds("A_");

更重要的是,这会提高性能吗?我怀疑在数据库内部,我们仍然需要读取所有 ID,然后获取我们想要的 ID。(除非有一些优化有助于加快速度(

任何输入/评论。

提前谢谢。 安 迪

您可以使用查询功能执行此操作。

例如,要获取所有 IDA_您可以使用如下选择器:

{"selector":{"$and":[{"_id": {"$gte": "A_"}},{"_id": {"$lt": "A_uffff"}}]}}

在Cloudant的sync-android中,这是:

Map<String, Object> idGt = Collections.singletonMap("_id", Collections.singletonMap("$gt", "A_"));
Map<String, Object> idLte = Collections.singletonMap("_id", Collections.singletonMap("$lte", "A_uffff"));
Map<String, Object> query = Collections.singletonMap("$and", Arrays.asList(idGt, idLte));
QueryResult result = q.find(query);
for (DocumentRevision doc : result) {
// do something with doc
}

其中q是从DocumentStore.query()获得的Query对象

我不太确定您的描述,但此外,如果您只想将具有特定前缀的文档子集复制到设备,则可以在构建拉取复制时使用上面显示的 JSON 选择器的字符串形式作为选择器方法的参数。

最新更新