javascript - 多个属性上的索引数据库游标范围

标签 javascript indexeddb

我在 indexeddb 对象存储上有两个属性的复合索引,并希望根据这两个属性的范围检索游标。

这是商店中的示例对象:

{species: 'Oak',xcoord: 123456, ycoord: 654321}

和索引:

treeStore.createIndex("treelocation", ["xcoord","ycoord"], { unique: false });

索引创建成功,我可以在 Chrome 开发者工具中看到它,但是现在我想打开一个在 x 和 y 坐标上都有键范围的光标(这将是 map 的范围).

在线搜索我看不到如何执行此操作,并且使用键范围数组打开索引似乎不起作用。

最佳答案

范围建议是答案的一部分,但即使使用数组键,它实际上也只是一维范围,而不是数据的 2 维(或 N 维)选择。使用您当前的架构,您需要执行以下操作:

index.openCursor([lowX, lowY], [highX, highY]).onsuccess = function(e) {
    var cursor = e.target.result;
    if (!cursor) return; // done!

    var x = cursor.key[0], y = cursor.key[1];
    // assert(lowX <= x && x <= highX);
    if (y < lowY) {
        cursor.continue([x, lowY]);
    } else if (y > highY) {
        cursor.continue([x + 1, lowY]);
    } else {
        processRecord(cursor.value); // we got one!
        cursor.continue();
    }
};

(如果坐标不是整数,请将 + 1 替换为适当的 epsilon)

我已经发布了一个通用解决方案的示例:

https://gist.github.com/inexorabletash/704e9688f99ac12dd336

关于javascript - 多个属性上的索引数据库游标范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16522115/

相关文章:

javascript - 如何在 VS Code 中定义源根目录

javascript - 无法清除 Vaadin-grid 中的输入?

javascript - 如何让 elevateZoom 与两个 div 一起使用

javascript - 在不填满磁盘的情况下检测 Firefox IndexedDB 或 Web Storage 存储限制?

javascript - 在类中实现异步 indexedDB 的简洁方法

javascript - 如何将 gmap 搜索自动完成功能限制在有限的国家/地区

javascript - 滚动时将图像添加到固定标题

javascript - 实现相当于 mysql 的最快方法是什么 - IndexedDB 的 "truncate tablename"?

javascript - 如果在一个事务已经完成后调用,IndexedDB 中的事务不会立即启动

javascript - 从具有相同域的多个 iFrame 访问 IndexedDB