#9061·rxdb

Dexie.js RxStorage: 使用选择器的 find() 和 findOne() 总是返回空或为空

作者: mmgfrcs创建于 2026年9月6日更新于 2026年9月16日
标签needs test case :mag_right:

QQ 设置

我的应用程序正在使用 Dexie.js 存储适配器使用 RxDB 存储数据. (减少)设置如下:

从 “rxdb/plugins/ storage-dexie” 导入{ getRxStorageDexie} ; 从“ rxdb/plugins/ core” 导入{ 添加RxPlugin} ; 从 “ rxdb/ plugins/ dev- mode” 导入 { RxDBDevModePlugin } ; 从“ rxdb/plugins/ validate- jav” 导入 { 包裹Validate AjvStorage } ; 从 “rxdb/plugins/core” 导入 {创建RxDatabase} ; 从 “rxdb/plugins/ cleanup” 导入 { RxDBCleanupPlugin } ; 从“ rxdb/ plugins/ 领导选择” 导入 { RxDBLeaderElectionPlugin }

允许存储 = 包裹 ValidateAjvStorage({存储: getRxStorageDexie ()}); 添加RxPlugin(RxDBDev ModePlugin) ; 添加RxPlugin(RxDBDev ModePlugin) ; 添加RxPlugin(RxDBDev ModePlugin) ; 添加RxPlugin(RxDBDev ModePlugin) 。 添加RxPlugin(RxDBCleanupPlugin) ; 添加 RxPlugin(RxDBCleanupPlugin) ; 添加 RxPlugin(RxDBCleanupPlugin) ; 添加 RxPlugin(RxDBCleanupPlugin) 。 添加RxPlugin(RxDBLeaderElectionPlugin) ; 添加RxPlugin(RxDBLeaderElectionPlugin) ; 添加RxPlugin(RxDBLeaderElectionPlugin) ; 添加RxPlugin(RxDBLeaderElectionPlugin) ;

Const db = 等待创建RxDatabase({ 名称:"资产追踪器", 存储:存储

  • ;

等待 db.add 组合({ 收藏名称 // 资产:{ 本地文档: 真实, /我们使用 JSON-schema 标准 计划 : { 版本 : 0, 主键:"id", 类型 : “ 对象” , 属性 :{ 编号:{ 类型 : 字符串, 最大Length: 100 / / <- 主键必须具有最大Length {\fn华文楷体\fs16\1cHE0E0E0} 数值:{ 类型 : 字符串, {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn华文楷体\fs16\1cHE0E0E0} 需要: ['id','value'] {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

  • ;

一切都很好,我插入了一些数据 如下,我可以看到它们 在浏览器devtools

cont 资产 Mod = 导入.meta.glob < ImageMetadata> ("/src/assets/**/*.webp",{进口:"默认"})

用于(让资产在资产Mod){
等待 db.assets. 插入({id: listPth, 值:(await list Mod[assetPth ()))
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

呼叫 “ db.assets. find (. exec () ” 找到全部成功 。

问题

然而,当我想用db.assets.findOne(iid).exec()'过滤它们时,如果iid'是一个存在的ID,它就会返回null'。 调用 “ db. assets. find( iid). exec( ) ” 也未能返回任何结果, 导致空数组( []' )

调用下面的“ nill”

  1. `db.assets.find One({选择者:{id: iid}}}).exec ()'
  2. `db.assets.findOne({选取者:{id:{$eq: iid}}}>).exec ()'

以及上述“查找”版本,返回空阵列。

调查

我修补了窃听器 发现了一个发现 我试图查询一个不存在的字段`it',它返回了原始查询如下:

查询:{
"选取者":{
"其":{
"$eq":"101.webp" (中文(简体) ).
{\fn华文楷体\fs16\1cHE0E0E0}
"删除":{
"$eq":虚假
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
{\fn华文楷体\fs16\1cHE0E0E0}
"限制": 1,
" skip":0, (英语).
"类":[
{
""去":"从".
{\fn华文楷体\fs16\1cHE0E0E0}
{
"id":"Asc" (英语).
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
[ . ]
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

如查询所述,find()'和findOne()'试图找到未被删除的数据,如果`删除=虚假'。 然而,在 db 中, 去除为"0"的字符串值.

<img宽="237"高="160" alt="Image" src="https://GitHub.com/user-attachments/assets/6efc977c-f338-4842-bb29-c11266220ab5"/"