PouchDB 具有“未定义”的文档,而不仅仅是 {} 或 {_id}如何删除它们? 环境依赖版本

问题描述

我的 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。他们遇到了同样的错误(这对我来说很有意义)
    • 因为它们是 undefined,所以我无法设置 _deleted 属性。即使我可以更改属性,也没有 _id 可以传递给 remove 等。
  • 处理 .destroy(),即从 allDocs 加载数据,调用 destroy,然后将其全部放回。这似乎很棘手,因为在此过程中可能会发生更多数据损坏。

环境

我目前的使用是在 nodejs 环境中。通过 ts-node 执行,但我怀疑这是否重要。

依赖版本

pouchdb 7.2.2
pouchdb-find 7.2.2

如何删除这些 undefined 文档?

除了销毁,还有什么办法可以解决吗? (意思是,我会将数据复制出来,销毁,然后将所有未损坏的数据放回去;但这可能会导致新问题

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)