TypeError: Cannot read property 'setAutocompactionInterval' of undefined

TypeError: Cannot read property 'setAutocompactionInterval' of undefined

即使在重新启动并使用 autoload: true 之后,我的数据库也有几个重复项(相同的 _id)。这很奇怪,但我决定按照 guide in the repository 中的建议使用 setAutocompactionInterval 来解决它,结果只是 TypeError: Cannot read property 'setAutocompactionInterval' of undefined.

const Db = require('nedb-promise')
    , curry = new Db({
        filename: 'curry'
        , autoload: true
        , onload: (e) => e && console.err(e)
    })

curry.persistence.setAutocompactionInterval(3600000)
// TypeError: Cannot read property 'setAutocompactionInterval' of undefined
Db.persistence.setAutocompactionInterval(3600000)
// TypeError: Cannot read property 'setAutocompactionInterval' of undefined
Db.curry.persistence.setAutocompactionInterval(3600000)
// TypeError: Cannot read property 'persistence' of undefined

我不知道是什么导致了这个错误。我想我会在 nedb-promise 上提出 Github 问题,但这是因为误用吗?我误解了它的工作方式吗?根据我的 Google 搜索,似乎没有人遇到此错误。

此问题已在 https://github.com/jrop/nedb-promise/issues/6

中得到解答

nedb-promise没有persistence,因此是未定义的,所以这个问题应该直接用nedb解决。

这可能会有所帮助,数据存储松散地遵循 nedb 的实现。这不是一个精确的表示,而不是通过所有这些代码行:

const Db = require('nedb-promise')
    , curry = new Db({
        filename: 'curry'
        , autoload: true
        , onload: (e) => e && console.err(e)
    })

如果您想控制底层数据存储,您可以使用原始 nedb 库照常创建它,然后创建包装版本:

const nedb = require('nedb')
const nedbP = require('nedb-promise')

const ds = nedb(...)
const db = nedbP.fromInstance(ds)

const Datastore = require('nedb')
const nedbPromise = require('nedb-promise')

const store = Datastore({autoload: true, filename: '...'})
const db = nedbPromise.fromInstance(store)
await db.insert(...)
store.persistence.compactDatafile()

希望对您有所帮助。