IndexedDB中的多键查询(类似于sql中的OR)
Multiple keys query in IndexedDB (Similar to OR in sql)
我在标签上使用multiEntry索引存储。
{ tags: [ 'tag1', 'tag2', 'tag3' ] }
和我有查询,也标签列表。
[ 'tag2', 'tag1', 'tag4' ]
我需要在查询中获得包含标签之一的所有记录(类似于SQL或语句)。
目前我找不到任何其他解决方案,除了在查询中遍历标签并按商店中的每个标签进行搜索。
有更好的解决方案吗?
谢谢。
您不能通过一个查询检索所有结果,除非使用迭代。您可以通过从最低值到最高值打开索引来优化搜索结果:
IDBKeyRange.bound ('tag1', 'tag4');
您可以使用的另一个Indexed-Db特性是打开多个查询并在查询完成时合并结果。这样会比迭代快得多。
IndexedDB只有范围查询作为Deni Mf回答。
OR查询是多个查询的简单联合。也许可以。
如果您想要高效的查询,您必须迭代游标并在必要时查找游标位置。使用我的库,它将是
tags = ['tag2', 'tag1', 'tag4'];
tags.sort();
iter = new ydn.db.KeyIterator('store name', 'tags', IDBKeyRange.bound(tags[0], tags[tags.length-1]);
keys = [];
i = 0;
var req = db.open(iter, function(cursor) {
if (tags.indexOf(cursor.indexKey()) >= 0) {
// we got the result
if (keys.indexOf(cursor.key()) == -1) { // remove duplicate
keys.push(cursor.key());
}
} else {
return tags[++i]; // jump to next index position.
}
);
req.done(function() {
db.list('store name', keys).done(function(results) {
console.log(results);
}
});
注意,该算法没有假阳性检索。首先执行仅键查询,这样我们就不会浪费在反序列化上。只有当我们删除了所有主键后才能检索结果
相关文章:
- Javascript日期格式类似于ISO,但本地
- toBoolean方法类似于toString
- 州和城市选择框类似于国家细分页面
- 通过传递图像的URL通过javascript读取/处理图像-类似于PHP中的file_get_contents
- 在BootStrap菜单栏中为所选项目设置背景,类似于BootStrap中的父导航选项
- 检测演示者工具的事件,类似于onmousedown
- 类似于Prism的Knockout js框架
- 创建类似于Google analytics的分析地图
- 敲除js变量设置类似于调用函数
- 如何处理javascript中的循环引用,类似于Excel提供迭代限制的方式
- 用null填充稀疏数组(类似于压缩两个数组)
- jQuery模态弹出的行为类似于确认和警报对话框
- 如何垂直淡出文本,类似于Amazon'的产品说明
- 如何在JavaScript中创建类似于something.function()的函数
- 使Dockerfile VOLUME的行为类似于docker compose volumes
- TypeScript代码类似于揭示模块模式结构
- E4X中是否有一种方法可以将基元数据类型的XMLList转换为类似于Array.join()的Array
- 有可能对对象中的所有键进行原子更新吗?类似于阵列拼接的东西
- tinyMCE删除背景图像:“"类似于magento的url的内容
- IndexedDB中的多键查询(类似于sql中的OR)