IndexedDB IDBKeyRange 复合/多重索引不起作用

2024-02-29

谁能解释为什么我的 IDBKeyRange 似乎只在第一列上进行过滤?

我有一个索引定义如下:

osDrugs.createIndex("combined", ["name", "strength", "form", "packsize"], {unique: false});

我的查询大致如下:

var transaction = pimsDB.transaction("drugs");
var objectStore = transaction.objectStore("drugs");
var range = IDBKeyRange.bound([tmpName, tmpStrength, tmpForm, tmpPack],[tmpName+"z", tmpStrength + "z", tmpForm+"z", tmpPack+"z"]);
var index = objectStore.index("combined");
var request = index.openCursor(range);

我的结果似乎是从 tmpName 一直到 tmpName +“z”进行过滤,但完全忽略了强度、形式和包装尺寸。

谁能看到我做错了什么吗?

哦,所有字段都存储为字符串......

Cheers,

Dan

附加信息:

我使用复合索引创建的另一个表似乎正在工作。这些表之间唯一的两个区别如下:

1)仅起作用的表在索引中有2个属性。 2) 在有效的表中,两个属性都是 3 属性主键的一部分。

我已经通过使用 Chrome 中的“资源”选项卡测试了它在此表上的工作情况,该选项卡允许我通过下界键过滤索引并返回数据。

更多附加信息:

经过更多测试,并切换到 FF 以确保它不是 chrome,但我遇到了问题,我想我已经找到了问题。我不相信搜索复合索引会按照我预期的方式工作......

IDBKeyRange 实际上是一个范围...看起来当我输入时,例如,

[“PARA”,“500”,“TAB”,“32”] [“PARAz”,“500z”,“TABz”,“32z”]

IndexedDB 搜索从 LB 开始的第一个药物,并选择直到以上限结束的最后一个药物为止的所有药物。

我相信,这就是为什么它能够选择从任何价值开始的优势。它实际上并不是过滤以“500”开头的优势,而是选择药物上第一个“500”实例到最后一个实例之间的所有内容。

如果我的假设是正确的,那么下面的文章可能有点错误/误导(因为我相信用户想要搜索矩形而不是范围:

Indexeddb 游标范围针对多个属性 https://stackoverflow.com/questions/16522115/indexed-db-cursor-ranges-on-mulitiple-properties

任何人都可以确认我所发现的内容并告诉我是否有办法可以实际搜索 IndexedDB 的多个值?在上面文章的底部,有人提到了一个相交函数,我认为它可以工作,但当我在线搜索时,它似乎不存在......

Cheers,

Dan


我已经在以下位置发布了通用解决方案:

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

简而言之,您需要检查结果的每个维度,如果任何值超出该维度的范围,请跳到下一个可能的键。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IndexedDB IDBKeyRange 复合/多重索引不起作用 的相关文章

  • IndexedDB 数据库的使用

    前端的存储方式 前端的存储 xff0c 可以使得页面交互更加友好 xff0c 特别是在保存草稿 xff0c 网络差的情况下对用户来说是很有用的 前端的存储方式有多种 xff0c 像 Local storage Session storage
  • HTML5 视频源作为本地存储的 blob 不再工作

    从 Chrome 80 开始 Blob 或 IndexedDB 的工作方式似乎发生了变化 将视频文件作为 blob 加载并通过 createObjectURL 将其分配给 HTML5 Video 元素仍然有效 load the blob t
  • IE10上indexeddb的存储限制

    我们正在构建一个 Web 应用程序 它使用 indexedDB 将大量文件存储为 blob 如果用户最大限度地使用我们的应用程序 我们可以在 indexeddb 中存储多达 15GB 的文件 我们遇到了 IE10 的问题 我强烈怀疑是配额问
  • 使用较短的数组查询 IndexedDB 复合索引

    IndexedDB 允许您对多个属性创建索引 就像如果你有类似的物体 a 0 b 0 你可以建立索引a and b 复合索引的行为是很奇怪 但显然应该可以使用比复合索引短的数组进行查询 所以在我的示例中 我应该能够查询类似的内容 0 并得到
  • 如何从javascript同步调用indexeddb方法

    我有一种方法说method1在 javascript 中 有另一种方法说method2 call method2在 method2 调用之后返回 method1 中需要的一个值 var userObj first Key 1 value s
  • 如何从indexedDB获取对象存储?

    我在我的应用程序上有用于网络存储的indexedDb 我想通过以下代码获取商店 var store myapp indexedDB db transaction tree nodes readwrite objectStore tree n
  • Lawnchair-IndexedDB 不支持多记录

    我尝试在索引数据库中创建多个记录 但它不允许我 例如耐克和阿迪达斯objectStores var nike Lawnchair adapter indexed db name stores record nike function e c
  • Dexie:如何添加到嵌套对象中的数组

    我正在使用 Dexie IndexedDB 包装器 并且尝试将一个对象添加到嵌套对象内的现有数组中 结构如下所示 Name John age 33 tags skill first NET second JAVA third special
  • 本地数据库 API - 已弃用 有什么替代方案? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 从多个 JavaScript 线程访问 IndexedDB

    概述 我试图避免从网页和网络工作人员访问 IndexedDB 时出现竞争情况 Setup 当用户使用站点时将项目保存到本地 IndexedDB 的网页 每当用户将数据保存到本地数据库时 记录就会被标记为 未发送 Web worker 后台线
  • IndexedDB:承诺升级?

    刚刚开始我的第一个项目 IndexedDb 我很难尝试创建一个在第一次使用时打开和升级数据库的系统 我想使用承诺 当前角Js q https code angularjs org 1 2 22 docs api ng service 24q
  • 从 Android 浏览器外部访问 Web Storage 或 IndexedDB

    我想使用 HTML 和 JavaScript 构建一个基于浏览器的离线应用程序来收集 Android 平板电脑上的调查数据 该应用程序将由一些带有表单的静态页面组成 供用户输入数据 然后使用 Web Storage 或 IndexedDB
  • 在 IE 10 中使用复合键创建索引时出现 DataError

    我正在使用 IE10 测试基于 indexedDB 的应用程序 我无法创建具有多个键的对象存储 例如 var objectStore theDb createObjectStore store1 keyPath key1 key2 当我尝试
  • 来自 Android 版 IndexedDB Chrome 中保存的块的 HTML5 视频

    我想使用 IndexedDB 在客户端存储离线 HTML5 应用程序的视频文件 为此 我从服务器 API 中下载了 2 个块的视频 然后我将它们作为 blob 存储在 indexedDB 中 然后在其他页面上我从数据库获取它们并创建新的 b
  • 具有三个键的复合索引,如果我查询跳过中间一个会发​​生什么?

    对于 PostgreSQL 我想在三列上使用复合索引A B C B is the created at日期时间 有时我可能会查询没有B 如果我复合索引会发生什么 A B C 但然后查询条件A and C 但不是B 那是 A and C但想要
  • 如何删除indexedDB?

    我正在从事一个涉及使用 IndexedDB 的项目 当我开始了解这项技术时 我需要能够手动删除索引数据库 以便我可以重新开始 我在 Firefox 中找到了方法 但在 Google Chrome 中找不到方法 我尝试删除该文件夹的内容 我使
  • Metro IndexedDB,浏览数据库

    我正在尝试使用 IndexedDB 将数据存储在 Windows 8 的 Metro 应用程序中 我希望能够浏览数据库 以监视我的操作是否按预期修改数据 所以我的问题是 有没有办法查看地铁应用程序 IE10 的实际数据库 类似于 Chrom
  • Indexeddb 添加新值而不是更新现有值

    当尝试更新其中的记录时索引数据库使用put方法 看起来是创造了新的价值而不是改变 根据MDN https developer mozilla org en US docs Web API IDBObjectStore put这是更新记录的方
  • 从 Linux bash 解析 FB-Purity 的 Firefox idb(索引数据库 API)object_data blob

    我想从 Linux bash 脚本中读取由名为 FB Purity 的特定 Firefox 插件存储的结构化数据 我找到了一个名为 mozilla firefox b8eab5j0 default storage default moz e
  • IndexedDB - 对象存储与多个数据库与索引?

    我想知道什么时候使用单个数据库与具有多个对象存储的数据库是一个好主意 我阅读了网络上的大多数教程并查看了 indexedDB 的规范 但找不到比较这些不同概念的好例子 有没有人有此类事情的具体示例 使用多个对象存储和 或代码的设计模型 只要

随机推荐

  • 撤消/重做实施[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给我一些如何实现撤消 重做功能的想法 就像我们在文本编辑器中一样 我应该使用什么算法以及我可以阅读什么 谢谢 我知道撤消类型有两大类
  • 路径中的 SVG 图像 - HTML

    我遇到了一个棘手的问题 我似乎无法弄清楚 它有很多不同的文件 所以我们先不添加任何代码或文件文档 所以我得到了一个 SVG 图像 上面有很多方形路径 我在 Inkscape 中的一条方形路径上放置了一张方形图像 然后我将 SVG 文件嵌入到
  • R:使用 mouseadds lm.cluster 进行聚类稳健标准误差 - 子集和权重的误差

    我正在尝试使用 mouseadds 包中的 lm cluster 函数来获取多重插补数据集的稳健聚类标准误差 我能够运行它的标准版本 但当我尝试添加子集或权重时出现以下错误 Error in eval substitute subset d
  • .height(item.height()) jquery 在 IE 中太慢了!备择方案?

    我正在尝试设置绝对定位项目的高度以匹配其容器元素的高度 问题是这些元素有数百个 标题中的标准代码在 chrome 中运行得很好 但在 IE 中却拖得很慢 我应该如何缓解这个问题 Too SLOW in IE var starttime ne
  • 反射,从方法中获取返回值

    我们如何执行一个方法并从Reflection中获取返回值 Type serviceType Type GetType class true var service Activator CreateInstance serviceType s
  • 为什么我无法访问静态函数中的私有构造函数,如下所示? [复制]

    这个问题在这里已经有答案了 我目前正在编写一个弱引用资源管理器 如下所示 编译器抱怨管理器有一个私有构造函数 我的问题是 为什么我无法访问静态函数中的私有成员函数 ifndef TENSOR MANAGER H define TENSOR
  • 我需要实现什么接口才能允许 VBA 中的 ForEach 作用于用 delphi 编写的 COM 对象?

    想象一下 我想在 VBA 伪代码 中执行类似的操作 并假设我有一个可枚举属性 IDList Dim MyObject object set MyObject CreateObject MyObjectClass for each Item
  • 无法安装h5py

    我正在尝试安装h5py http www h5py org 但是当我这样做时pip install h5py or use python setup py install从源代码来看 致命错误 hdf5 h No such file or
  • speex解码出错

    我使用 speex 对一些音频数据进行编码并通过 UDP 发送 然后在另一端对其进行解码 我用 speex 进行了一些测试 发现如果我在编码后立即解码数据包 则解码后的数据与原始数据相差甚远 缓冲区开头的大部分字节都是 0 因此 当我解码通
  • 任意多个节点的贝尔曼-福特距离向量算法

    我正在尝试为模拟路由器的类编写一个程序 到目前为止我已经设置了基础知识 路由器 可以通过模拟服务器向连接到该服务器的其他 路由器 发送和接收数据包 每个数据包仅包含该路由器的距离向量 当路由器接收到数据包时 它应该使用贝尔曼 福特算法相应地
  • 我可以在“coqtop - nois”下定义策略吗?

    coqtop nois Welcome to Coq 8 7 0 October 2017 Coq lt Ltac i idtac Toplevel input characters 0 4 gt Ltac i idtac gt Error
  • 如何在 Windows 中使用 PuTTY 创建 SSH 隧道?

    我需要在 Windows 中使用 PuTTY 创建 SSH 隧道 这与 Linux 中的命令相同 ssh fN L 2000 SomeIp 2000 myusername myLinuxBox 我在 PuTTY 中尝试了许多选项 包括将 G
  • 将大型 JSON 对象传递到新窗口中的另一个页面。

    如果这个问题已经得到回答 我提前道歉 我已经用谷歌搜索了几个小时了 但仍然没有找到任何似乎可以回答我的确切问题的东西 本质上 我有一个非常复杂 高度风格化的视图 它显示从数据库中提取的特定于用户的数据 我已将数据捕获为 JSON 对象 并使
  • 将透明 .PNG 图像传输到屏幕上

    你好 我有一个图像 上面画了一个黑色矩形 它的背景是透明的 该文件保存为 png clear png 然后我有另一个图像 它只是保存为 jpeg 的纯红色背景 background jpeg 我试图做的是使clear png 中的黑色矩形显
  • 如何处理空手道测试中的签名请求?

    首先 感谢构建空手道 它对于测试 API 和 UI 非常有用 我们正在使用它来测试许多端点 但我们想知道是否有一种方法或哪种方法是处理带有签名作为标头中请求的一部分的请求的最佳方法 在我们的例子中 我们有两个标头 ApiKey 这个值总是相
  • 线性冲突违反了可受理性,让我发疯

    当两个棋子tj和tk发生线性冲突时 如果tj和tk在同一行 则tj和tk的目标位置都在该行上 tj在tk的右侧 tj的目标位置在左侧tk 的目标位置 线性冲突迫使两个冲突图块相互包围 从而使它们的曼哈顿距离至少增加两步 因此 启发式函数将为
  • 创建一个进程并重定向其输入/输出并且不继承套接字句柄

    是否可以创建一个进程并重定向其输入和输出 但设置子进程不继承套接字句柄 也许以某种方式使用 CreateProcess 进行 pinvoke 如果我使用 UseShellExecute true 子级不会继承套接字 但我无法重定向输出 创建
  • 如何更改所有私有 JLabel 的字体大小

    我见过类似的问题 例如this https stackoverflow com questions 1966296 changing default jlabel font 但就我而言 我有 25 个以上的私有 JLabels 我在声明它时
  • 使用pandas写入和读取3D数据

    我有一个使用保存在文本文件中的 3D 数据的项目 我目前使用单个空格来分割第一个维度上的数据 使用一个换行符 n 来分割第二个维度 使用两个换行符 n n 来分割最后一个维度 并使用默认的读取和写入蟒蛇 这些数据的解释是使用字符串分割和列表
  • IndexedDB IDBKeyRange 复合/多重索引不起作用

    谁能解释为什么我的 IDBKeyRange 似乎只在第一列上进行过滤 我有一个索引定义如下 osDrugs createIndex combined name strength form packsize unique false 我的查询