问题描述
我的 pouchdb-find
查询失败,因为有一些错误的数据对象:它们是 undefined
,实际上存储在数据库中的 undefined
。它们不是 {}
或 {_id: 'something'}
,它们实际上是 undefined
。
详情
我在尝试查询非空字段时发现了它。当我查询 {$eq: null}
以查找这些记录时,我发现了一些奇怪的东西。
查询:
await db.find({ selector: {text: {$gt: null}} });
// or
await db.find({ selector: {text: {$exists: true}} });
结果:
{
docs: [
undefined,undefined,{
_id: 'test-id-1618443059797',_rev: '3-251568304e939d8d5b688af8c09eaa13'
},{
_id: 'test-id-1618443082960',_rev: '3-a60c1dde0e11e14d0a14cd86d2478140'
}
]
}
这似乎解释了为什么我会收到如下错误。 (略有不同的格式来自 tslog
)。
TypeError Cannot read property 'text' of undefined
error stack:
• index.js:14 getFieldFromDoc
node_modules/.pnpm/pouchdb-selector-core@7.2.2/node_modules/pouchdb-selector-core/lib/index.js:14:18
• index.js:345 <anonymous>
node_modules/.pnpm/pouchdb-selector-core@7.2.2/node_modules/pouchdb-selector-core/lib/index.js:345:25
• index.js:342 rowFilter
node_modules/.pnpm/pouchdb-selector-core@7.2.2/node_modules/pouchdb-selector-core/lib/index.js:342:25
• index.js:319 <anonymous>
node_modules/.pnpm/pouchdb-selector-core@7.2.2/node_modules/pouchdb-selector-core/lib/index.js:319:12
• index.js:318 filterInMemoryFields
node_modules/.pnpm/pouchdb-selector-core@7.2.2/node_modules/pouchdb-selector-core/lib/index.js:318:15
• index.js:1307 <anonymous>
node_modules/.pnpm/pouchdb-find@7.2.2/node_modules/pouchdb-find/lib/index.js:1307:40
其他涉及字段的查询也会发生同样的错误,因为 null.<anything>
会不断导致类似的错误。
我认为正在发生的事情
我认为这些是损坏的写入,我正在尝试找出如何在不执行 destroy()
的情况下清理它们。由于存在多个 undefined
记录,因此状态总体上似乎已损坏。
我的尝试
- 彻底调试,通过库代码。帮我澄清了问题,但我还没有解决办法。
- 为了更好的衡量,我尝试了各种方法来删除记录 detailed in the PouchDB docs。他们遇到了同样的错误(这对我来说很有意义)
- 处理
.destroy()
,即从allDocs
加载数据,调用destroy
,然后将其全部放回。这似乎很棘手,因为在此过程中可能会发生更多数据损坏。
环境
我目前的使用是在 nodejs 环境中。通过 ts-node
执行,但我怀疑这是否重要。
依赖版本
pouchdb 7.2.2
pouchdb-find 7.2.2
如何删除这些 undefined
文档?
除了销毁,还有什么办法可以解决吗? (意思是,我会将数据复制出来,销毁,然后将所有未损坏的数据放回去;但这可能会导致新问题
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)