0

我的数据库有几个重复项(相同的 _id),即使在重新启动和使用autoload: true. 这很奇怪,但我决定按照存储库指南中的建议使用 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

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

4

2 回答 2

0

这个问题已经在https://github.com/jrop/nedb-promise/issues/6中得到解答

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

于 2017-12-08T01:07:20.923 回答
0

这可能会有所帮助,数据存储松散地遵循 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()

我希望这有帮助。

于 2017-12-11T09:52:22.083 回答