indexedDB的一条数据如下:
{isSelected: false, projName: '222', desc: '222', path: '/Users/jphn/electron-code/src', create_time: '2025-03-15T03:03:06.805Z', …}
定义时候:是有给isSelected的索引的:
db.version(1).stores({
settings: '++id',
projs: '++id,name,desc,path,isSelected'
})
我查询的时候:
const selectedProj = await db.projs.where('isSelected').equals(true).first();
报错:
projApi.dexie.ts:42 Unable to get selected project:
DexieError2 {name: 'DataError', message: "Failed to execute 'bound' on 'IDBKeyRange': The pa… 'IDBKeyRange': The parameter is not a valid key.", inner: DataError: Failed to execute 'bound' on 'IDBKeyRange': The parameter is not a valid key.
at mak…}
将布尔值转换为数字或字符串:
// 在存储数据时
const projData = {
projName: '222',
desc: '222',
path: '/Users/jphn/electron-code/src',
isSelected: 1, // 使用0和1代替false和true
create_time: '2025-03-15T03:03:06.805Z'
};
// 或者作为字符串
const projData = {
// ...其他字段
isSelected: 'true', // 使用'false'和'true'字符串
};
// 在查询时
const selectedProj = await db.projs.where('isSelected').equals(1).first();
// 或
const selectedProj = await db.projs.where('isSelected').equals('true').first();
将布尔值以数字形式存储(0表示false,1表示true),这是最简单且兼容性最好的方式。
出现此问题的根本原因是:IndexedDB 的索引键不允许使用 boolean 类型值。在 IndexedDB 规范中,合法的键类型包括:string、number、Date、Array(由这些类型组成),但不包含 boolean 类型。
具体解决方法:
修改数据库 Schema:
// 将索引字段转换为数值类型 (0/1)
db.version(1).stores({
settings: '++id',
projs: '++id,name,desc,path,isSelected'
});
存储数据时转换类型:
// 存入时转换 boolean 为 number (true → 1, false → 0)
await db.projs.add({
...yourData,
isSelected: 1 // 或 0
});
修改查询方式:
// 查询时使用 1 替代 true
const selectedProj = await db.projs.where('isSelected').equals(1).first();
额外注意事项:
isSelected
字段批量转换为数值类型 (0/1)db.delete()
删除旧库或增加版本号触发升级mapToClass
可以在模型层自动处理类型转换错误原理说明:
当试图用 true
作为索引键值查询时,IndexedDB 底层会检测到键类型不合法 (boolean 不是有效的键类型),从而抛出 DataError
。该错误会沿着 Dexie 的 Promise 链向上传播,最终被你的 try/catch 捕获。
问题内容: 如何在Elasticsearch中按数组索引查询/过滤? 我有一个像这样的文件: 我想搜索 LIN [0] 是否为“ UP”并且 LIN [1]是否 存在。 谢谢。 问题答案: 这看起来可能像hack,但是可以肯定地起作用。首先,我们将令牌计数类型与多字段一起应用以捕获令牌数量作为字段。因此,映射将如下所示- 链接-http: //www.elasticsearch.org/guide
问题内容: 我有一个查询,在我认为可能不使用索引的情况下,出于好奇,我将其重现: 创建一个具有1.000.000行(在中有10个不同的值,在中有500个字节的数据)的。 创建一个索引并收集表统计信息: 尝试获取和的不同值: 不使用索引,前提是提示不会更改。 我想在这种情况下不能使用索引,但是为什么呢? 问题答案: 我运行了Peter的原始内容并复制了他的结果。然后我应用了dcp的建议… 之所以如此
所以除了上面的5个字段之外,core0中的rest all字段将为null。 下一个是核心1 核心1我们使用单独的查询索引3个字段 谢谢,拉维
我在MySQL中有一个表,它有一个主键列。 有什么建议吗??也许是一个询问..:)
问题内容: 我在ElasticSearch和Rails时遇到问题,由于attr_protected,其中一些数据未正确索引。Elastic Search在哪里存储索引数据?检查实际的索引数据是否错误将很有用。 检查映射对您没有帮助,将列出该字段。 问题答案: 探索您的ElasticSearch集群的最简单方法可能是使用elasticsearch -head。 您可以通过以下方式安装它: 然后(假设
问题内容: 我对即将要做的索引编制感到有些困惑。 首先,我使用4列索引,如下所示: 索引名称-advanced_query 索引中将使用列-标题,类别1,类别2,类别3 索引代码 好的,这就是它的工作方式(据我了解): 标题 查询将使用索引。 cat_1 查询将使用索引。 cat_2 查询将使用索引。 cat_3 的查询将 不 使用索引。因此,我将为其创建一个不同的索引。 查询 标题cat_1 将
我有两个实体AAA和BBB,如下所示 以及BBB实体作为 现在使用spring数据JPA本机查询,我需要一个如下的查询(使用JPARepository) 当执行时,它会给出以下异常 这里的bbb详细信息是键(BBBType)值(子实体)对的映射。如何根据数据jpa本机查询中的BBBType值查询映射的子实体?